Apache Spark puede ser desplegado en varios modos de clúster, incluyendo el modo Standalone y el modo YARN. El modo Standalone es un clúster Spark simple que se configura y gestiona de manera autónoma. El modo YARN (Yet Another Resource Negotiator) permite ejecutar Spark en un clúster Hadoop, gestionando los recursos y las aplicaciones a través del ResourceManager de Hadoop.
Despliegue en Modo Standalone
# Configurar el Maestro en el nodo maestro:
export SPARK_HOME=/path/to/spark
export PATH=$PATH:$SPARK_HOME/bin
# Iniciar el Maestro en el nodo maestro:
$SPARK_HOME/sbin/start-master.sh
# Configurar los Trabajadores en cada nodo trabajador:
export SPARK_HOME=/path/to/spark
export PATH=$PATH:$SPARK_HOME/bin
# Iniciar los Trabajadores en cada nodo trabajador apuntando al maestro:
$SPARK_HOME/sbin/start-slave.sh spark://:7077
# Enviar Aplicaciones a Spark desde cualquier nodo:
$SPARK_HOME/bin/spark-submit --master spark://:7077 --class
Despliegue en Modo YARN
# Configuración de Hadoop:
# Asegúrate de tener Hadoop instalado y configurado. Debes tener acceso a HDFS y YARN ResourceManager.
# Configurar Spark para YARN en cualquier nodo:
export SPARK_HOME=/path/to/spark
export PATH=$PATH:$SPARK_HOME/bin
export HADOOP_CONF_DIR=/path/to/hadoop/etc/hadoop
# Enviar Aplicaciones a YARN desde cualquier nodo:
$SPARK_HOME/bin/spark-submit --master yarn --deploy-mode cluster --class
# Ejemplo de un comando de spark-submit:
$SPARK_HOME/bin/spark-submit --master yarn --deploy-mode cluster --class org.apache.spark.examples.SparkPi $SPARK_HOME/examples/jars/spark-examples_2.12-3.1.2.jar 10
Modo Standalone:
SPARK_HOME
y PATH
.start-master.sh
.SPARK_HOME
y PATH
.start-slave.sh
.spark-submit
para enviar aplicaciones al clúster Spark, especificando el maestro y la clase principal de la aplicación.Modo YARN:
SPARK_HOME
, PATH
, y HADOOP_CONF_DIR
.spark-submit
para enviar aplicaciones a YARN, especificando --master yarn
y --deploy-mode cluster
, junto con la clase principal de la aplicación y el archivo JAR de la aplicación.Este ejemplo muestra cómo desplegar aplicaciones Spark tanto en modo Standalone como en modo YARN, incluyendo la configuración necesaria y los comandos para iniciar nodos y enviar aplicaciones.
Para aprovechar al máximo Apache Spark, es crucial configurar y optimizar adecuadamente el entorno de ejecución. La configuración y optimización de Spark pueden mejorar significativamente el rendimiento y la eficiencia de las aplicaciones de procesamiento de datos. A continuación se describen algunas configuraciones y estrategias básicas para optimizar Spark.
# Configuración de Spark
export SPARK_HOME=/path/to/spark
export PATH=$PATH:$SPARK_HOME/bin
# Configuración básica en spark-submit
$SPARK_HOME/bin/spark-submit \
--master yarn \
--deploy-mode cluster \
--executor-memory 4G \
--executor-cores 2 \
--num-executors 10 \
--class org.apache.spark.examples.SparkPi \
$SPARK_HOME/examples/jars/spark-examples_2.12-3.1.2.jar 10
# Configuración del archivo spark-defaults.conf
echo "
spark.executor.memory 4g
spark.executor.cores 2
spark.executor.instances 10
spark.driver.memory 4g
spark.yarn.executor.memoryOverhead 512
" > $SPARK_HOME/conf/spark-defaults.conf
# Configuración del archivo spark-env.sh
echo "
export SPARK_WORKER_MEMORY=4g
export SPARK_WORKER_CORES=2
export SPARK_WORKER_INSTANCES=10
" > $SPARK_HOME/conf/spark-env.sh
Configuración de Spark:
SPARK_HOME
para apuntar al directorio de instalación de Spark.bin
de Spark al PATH
para facilitar la ejecución de comandos de Spark.Configuración básica en spark-submit:
--master yarn
: Especifica que la aplicación se ejecutará en un clúster YARN.--deploy-mode cluster
: Indica que la aplicación se desplegará en modo clúster.--executor-memory 4G
: Asigna 4 GB de memoria a cada ejecutor.--executor-cores 2
: Asigna 2 núcleos de CPU a cada ejecutor.--num-executors 10
: Especifica el número de ejecutores a utilizar.--class org.apache.spark.examples.SparkPi
: Especifica la clase principal de la aplicación.$SPARK_HOME/examples/jars/spark-examples_2.12-3.1.2.jar 10
: Especifica el archivo JAR de la aplicación y los argumentos.Configuración del archivo spark-defaults.conf:
spark.executor.memory 4g
: Asigna 4 GB de memoria a cada ejecutor.spark.executor.cores 2
: Asigna 2 núcleos de CPU a cada ejecutor.spark.executor.instances 10
: Especifica el número de ejecutores a utilizar.spark.driver.memory 4g
: Asigna 4 GB de memoria al driver.spark.yarn.executor.memoryOverhead 512
: Asigna un overhead de memoria adicional para YARN.Configuración del archivo spark-env.sh:
export SPARK_WORKER_MEMORY=4g
: Asigna 4 GB de memoria a cada trabajador.export SPARK_WORKER_CORES=2
: Asigna 2 núcleos de CPU a cada trabajador.export SPARK_WORKER_INSTANCES=10
: Especifica el número de instancias de trabajadores a utilizar.Asignación de Recursos:
Paralelismo:
spark.default.parallelism
) para asegurar que las tareas se distribuyan eficientemente entre los ejecutores.Caché y Persistencia:
persist()
y cache()
para mantener en memoria los RDDs o DataFrames que se utilizan repetidamente, reduciendo el tiempo de computación.Configuración de Shuffle:
spark.shuffle.partitions
) para optimizar la transferencia de datos entre ejecutores.Tuning de YARN:
yarn.nodemanager.resource.memory-mb
, yarn.scheduler.maximum-allocation-mb
) para optimizar la asignación de recursos.