Quiero configurar los parámetros de Apache Spark en Amazon EMR.
Descripción corta
Para configurar las aplicaciones de Spark, usa argumentos de línea de comandos como spark-submit. O bien, configura los valores del archivo spark-defaults.conf para que los cambios sean permanentes.
Resolución
Uso de spark-submit para configurar los parámetros de Spark
Para cargar configuraciones de forma dinámica mediante el shell de Spark y el comando spark-submit, usa una de las siguientes opciones:
- Opciones de línea de comandos, como --num-executors.
- El indicador**--conf**.
Nota: Para ver la lista completa de opciones, ejecuta spark-submit--help.
El comando spark-submit lee las opciones de configuración de spark-defaults.conf.
En el archivo spark-defaults.conf, cada línea incluye una clave y un valor separados por espacios en blanco.
Para más información, consulta Submitting user applications with spark-submit (Envío de aplicaciones de usuario con spark-submit). Para más información sobre los parámetros compatibles con Spark, consulta Spark configuration (Configuración de Spark) en el sitio web de Apache Spark.
Opciones de configuración de ejemplo:
--class \
--master \
--deploy-mode \
--conf = \
--num-executors \
--executor-memory G \
--driver-memory G \
--executor-cores \
--driver-cores \
--jars \
--packages \
--py-files < Comma-separated list of .zip, .egg, or .py files to place on the PYTHONPATH for Python apps> \
El comando spark-submit transfiere automáticamente el JAR de la aplicación y cualquier JAR incluido con la opción --jars al clúster. Debes separar con comas las URL que aparecen después de --jars. Asimismo, spark-submit incluye la lista en las rutas de las clases del controlador y del ejecutor, y copia los archivos JAR y los archivos al directorio de trabajo de cada SparkContext de los nodos ejecutores.
Nota: La ampliación del directorio no funciona con --jars.
Ejemplo del comando spark-submit:
spark-submit \
--deploy-mode cluster \
--class org.apache.spark.examples.SparkPi \
--conf spark.dynamicAllocation.enabled=false \
--master yarn \
--num-executors 4 \
--driver-memory 4G \
--executor-memory 4G \
--executor-cores 1 \
/usr/lib/spark/examples/jars/spark-examples.jar \
10
Para pasar los parámetros de memoria, usa el indicador --conf:
spark-submit \
--deploy-mode cluster \
--class org.apache.spark.examples.SparkPi \
--conf spark.dynamicAllocation.enabled=false \
--master yarn \
--conf spark.driver.memory=1G \
--conf spark.executor.memory=1G \
/usr/lib/spark/examples/jars/spark-examples.jar \
10
Uso de los parámetros personalizados de Spark para lanzar spark-shell y pyspark shell
Para iniciar spark-shell o pyspark shell, ejecuta los siguientes comandos:
spark-shell
spark-shell \
--conf spark.driver.maxResultSize=1G \
--conf spark.driver.memory=1G \
--deploy-mode client \
--conf spark.executor.memory=1G \
--conf spark.executor.heartbeatInterval=10000000s \
--conf spark.network.timeout=10000001s \
--executor-cores 1 \
--num-executors 5 \
--packages org.apache.spark:spark-avro_2.12:3.1.2 \
--conf 'spark.serializer=org.apache.spark.serializer.KryoSerializer'
pyspark shell
pyspark \
--conf spark.driver.maxResultSize=1G \
--conf spark.driver.memory=1G \
--deploy-mode client \
--conf spark.executor.memory=1G \
--conf spark.executor.heartbeatInterval=10000000s \
--conf spark.network.timeout=10000001s \
--executor-cores 1 \
--num-executors 5 \
--packages org.apache.spark:spark-avro_2.12:3.1.2 \
--conf 'spark.serializer=org.apache.spark.serializer.KryoSerializer'
Uso de spark-defaults.conf para configurar los parámetros de Spark
Para que los cambios de configuración sean permanentes, añade la configuración al archivo /etc/spark/conf/spark-defaults.conf. A continuación, reinicia el servidor del historial de Spark. En el siguiente ejemplo se muestra cómo configurar la memoria del ejecutor y la del controlador en spark-defaults.conf. En este ejemplo, cada línea tiene una clave y un valor separados por un espacio en blanco.
Ejemplo
spark.executor.memory 9486M
spark.driver.memory 9486M
En el siguiente ejemplo se configura la memoria del controlador y del ejecutor de Spark durante el lanzamiento del clúster:
[
{
"Classification": "spark-defaults",
"Properties": {
"spark.executor.memory": "9486M",
"spark.driver.memory": "9486M"
}
}
]
Nota: En Amazon EMR, la configuración spark.yarn.executor.memoryOverhead tiene un valor predeterminado de 18,75 %, pero el valor predeterminado estándar de Spark es 0,1875 %. Una vez que hayas configurado tu trabajo de Spark, supervisa su rendimiento y analiza el uso de los recursos para recopilar información y ajustar aún más los parámetros de tu trabajo.
Información relacionada
AWS open data analytics (Análisis de datos abiertos de AWS)
Adición de un paso de Spark
Modify your cluster on the fly with Amazon EMR reconfiguration (Modificación del clúster sobre la marcha con la reconfiguración de Amazon EMR)