Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Configurar Spark
Puede configurar Spark en Amazon EMR
Entre las clasificaciones de configuración para Spark en Amazon EMR se incluyen los siguientes:
-
spark
: establece la propiedadmaximizeResourceAllocation
en true o false. Si es true, Amazon EMR configura automáticamente las propiedadesspark-defaults
en función de la configuración de hardware del clúster. Para obtener más información, consulte Uso de maximizeResourceAllocation. -
spark-defaults
: establece los valores del archivospark-defaults.conf
. Para obtener más información, consulte Spark configurationen la documentación de Spark. -
spark-env
: establece los valores del archivospark-env.sh
. Para obtener más información, consulte Environment variablesen la documentación de Spark. -
spark-hive-site
: establece los valores del archivohive-site.xml
para Spark. -
spark-log4j
: (versión 6.7.x y anteriores de Amazon EMR) establece los valores del archivolog4j.properties
. Para obtener más información, consulte el archivo log4j.properties.templateen GitHub. -
spark-log4j2
: (versión 6.8.0 y posteriores de Amazon EMR) establece los valores del archivolog4j2.properties
. Para obtener más información, consulte el archivo log4j2.properties.templateen GitHub. -
spark-metrics
: establece los valores del archivometrics.properties
. Para conocer la configuración y obtener más información, consulte el archivo metrics.properties.templateen GitHub y Metrics en la documentación de Spark.
nota
Si va a migrar cargas de trabajo de Spark a Amazon EMR desde otra plataforma, le recomendamos que pruebe las cargas de trabajo con los Valores predeterminados de Spark establecidos por Amazon EMR antes de agregar configuraciones personalizadas. La mayoría de los clientes observan mejoras de rendimiento con nuestra configuración predeterminada.
Temas
- Valores predeterminados de Spark establecidos por Amazon EMR
- Configuración de la recopilación de elementos no utilizados de Spark en Amazon EMR 6.1.0
- Uso de maximizeResourceAllocation
- Configuración del comportamiento de retirada de nodos
- Variable de entorno Spark ThriftServer
- Cambio de la configuración predeterminada de Spark
- Migración de Apache Log4j 1.x a Log4j 2.x
Valores predeterminados de Spark establecidos por Amazon EMR
En la siguiente tabla, se muestra cómo Amazon EMR establece valores los predeterminados en spark-defaults
que afectan a las aplicaciones.
Opción | Descripción | Valor predeterminado |
---|---|---|
spark.executor.memory |
Cantidad de memoria que utilizar por proceso de ejecutor. Por ejemplo: |
Esta configuración se determina según los tipos de instancias principales y de tareas del clúster. |
spark.executor.cores |
El número de núcleos que se va a utilizar en cada ejecutor. |
Esta configuración se determina según los tipos de instancias principales y de tareas del clúster. |
spark.dynamicAllocation.enabled |
Si se establece en true, utilice la asignación de recursos dinámica para escalar y reducir verticalmente el número de ejecutores registrados en una aplicación en función de la carga de trabajo. |
notaAmazon EMR configura automáticamente Spark Shuffle Service. |
spark.sql.hive.advancedPartitionPredicatePushdown.enabled |
Si se establece en true, se habilita la inserción avanzada de predicados de particiones en el metaalmacén de Hive. |
true |
spark.sql.hive.stringLikePartitionPredicatePushdown.enabled |
Inserta los filtros notaGlue no admite la inserción de predicados para |
true |
Configuración de la recopilación de elementos no utilizados de Spark en Amazon EMR 6.1.0
Al establecer configuraciones personalizadas de recopilación de elementos no utilizados con spark.driver.extraJavaOptions
y spark.executor.extraJavaOptions
, se produce un error en el lanzamiento del controlador o el ejecutor con Amazon EMR 6.1 debido a un conflicto de configuración de recopilación de elementos no utilizados con Amazon EMR 6.1.0. En el caso de Amazon EMR 6.1.0, la configuración predeterminada de recopilación de elementos no utilizados se establece mediante spark.driver.defaultJavaOptions
y spark.executor.defaultJavaOptions
. Esta configuración se aplica únicamente a Amazon EMR 6.1.0. Las opciones de JVM que no estén relacionadas con la recopilación de elementos no utilizados, como las que permiten configurar el registro (-verbose:class
), todavía se pueden establecer mediante extraJavaOptions
. Para obtener más información, consulte Spark application properties
Uso de maximizeResourceAllocation
Si quiere configurar los ejecutores para utilizar el máximo de recursos posible en cada nodo de un clúster, establezca maximizeResourceAllocation
en true
en la clasificación de configuración spark
. La opción maximizeResourceAllocation
es específica de Amazon EMR. Al habilitar maximizeResourceAllocation
, Amazon EMR calcula el máximo de recursos de computación y de memoria disponibles para un ejecutor en una instancia del grupo de instancias principales. A continuación, establece la configuración spark-defaults
correspondiente en función de los valores máximos calculados.
Amazon EMR calcula el máximo de recursos de computación y de memoria disponibles para un ejecutor basado en un tipo de instancia de la flota de instancias principales. Dado que cada flota de instancias puede tener distintos tipos y tamaños de instancias dentro de una flota, la configuración de ejecutor que utiliza Amazon EMR puede no ser la mejor para sus clústeres, por lo que no recomendamos utilizar la configuración predeterminada cuando se utilice la asignación máxima de recursos. Configure ajustes personalizados para los clústeres de su flota de instancias.
nota
No debe usar la maximizeResourceAllocation
opción en clústeres con otras aplicaciones distribuidas, por ejemplo. HBase Amazon EMR utiliza configuraciones de YARN personalizadas para las aplicaciones distribuidas, lo que puede entrar en conflicto con maximizeResourceAllocation
y hacer que se produzcan errores en las aplicaciones de Spark.
A continuación, se muestra un ejemplo de una clasificación de configuración de Spark con la opción maximizeResourceAllocation
establecida en true
.
[ { "Classification": "spark", "Properties": { "maximizeResourceAllocation": "true" } } ]
Opción | Descripción | Valor |
---|---|---|
spark.default.parallelism | Transformaciones como unir y paralelizar RDDs devuelven el número predeterminado de particiones cuando el usuario no lo establece. reduceByKey |
2X número de núcleos de CPU disponibles para contenedores de YARN. |
spark.driver.memory | Cantidad de memoria que se utilizará para el proceso del controlador, es decir, dónde se SparkContext inicializa. (por ejemplo, 1 g, 2 g). |
El ajuste se configura en función de los tipos de instancia en el clúster. Sin embargo, dado que la aplicación del controlador de Spark puede ejecutarse en la instancia principal o en una de las instancias básicas (por ejemplo, en un cliente de YARN y modos de clústeres, respectivamente), esto se establece en función del más pequeño de los tipos de instancia de estos dos grupos de instancias. |
spark.executor.memory | Cantidad de memoria que se va a utilizar por cada proceso de ejecutor, por ejemplo 1g, 2g. |
El ajuste se configura en función de los tipos de instancias secundarias y de tareas del clúster. |
spark.executor.cores | El número de núcleos que se va a utilizar en cada ejecutor. | El ajuste se configura en función de los tipos de instancias secundarias y de tareas del clúster. |
spark.executor.instances | El número de ejecutores. |
El ajuste se configura en función de los tipos de instancias secundarias y de tareas del clúster. Se define a menos que |
Configuración del comportamiento de retirada de nodos
Con la versión 5.9.0 o una posterior de Amazon EMR, Spark en Amazon EMR incluye un conjunto de características para ayudar a garantizar que Spark gestione correctamente la terminación de los nodos debido a una solicitud de cambio de tamaño manual o de política de escalado automático. Amazon EMR implementa un mecanismo de lista de denegación en Spark que se basa en el mecanismo de retirada de YARN. Este mecanismo ayuda a evitar que se programen tareas nuevas en un nodo que se está retirando, al tiempo que permite que finalicen las tareas que ya se están ejecutando. Además, existen características para ayudar a recuperar los trabajos de Spark más rápido si se pierden bloques de reorganización cuando termina un nodo. El proceso de recálculo se activa antes, y está optimizado para realizarse más rápido, con menos reintentos de etapas, y se puede evitar que se produzcan errores en los trabajos debido a problemas de recuperación provocados por los bloques de reorganización que faltan.
importante
La configuración spark.decommissioning.timeout.threshold
se agregó en la versión 5.11.0 de Amazon EMR para mejorar la resiliencia de Spark cuando se utilizan instancias de spot. En las versiones anteriores, cuando un nodo utilizaba una instancia de spot y la instancia se terminaba debido al precio de puja, era posible que Spark no pudiera gestionar la terminación correctamente. Los tareas pueden fallar y los recálculos de reorganización pueden tardar mucho tiempo. Por este motivo, le recomendamos que utilice la versión 5.11.0 o posterior si utiliza instancias de spot.
Opción | Descripción | Valor predeterminado |
---|---|---|
|
Cuando se establece en |
|
|
Cantidad de tiempo que permanece en la lista de denegación un nodo cuyo estado es |
|
|
Disponible en la versión 5.11.0 o posteriores de Amazon EMR. Se especifica en segundos. Cuando un nodo pasa al estado Retirando, si el host lo va a retirar en un periodo de tiempo igual o menor que este valor, Amazon EMR no solo agrega el nodo a la lista de denegación, sino que también limpia el estado del host (según se especifique mediante |
|
|
Cuando se establece en |
|
|
Cuando se establece en |
true |
Variable de entorno Spark ThriftServer
Spark establece la variable de entorno Hive Thrift Server Port, HIVE_SERVER2_THRIFT_PORT
, en 10 001.
Cambio de la configuración predeterminada de Spark
Puede cambiar la configuración predeterminada en spark-defaults.conf
utilizando la clasificación de configuración spark-defaults
al crear el clúster o el ajuste maximizeResourceAllocation
en la clasificación de configuración spark
.
Los siguientes procedimientos muestran cómo modificar los ajustes mediante la CLI o la consola.
Para crear un clúster con el valor de spark.executor.memory definido en 2g mediante la CLI
-
Cree un clúster con Spark instalado y el valor de
spark.executor.memory
establecido en 2g con el siguiente comando, que hace referencia a un archivo (myConfig.json
) almacenado en Amazon S3.aws emr create-cluster --release-label
emr-7.6.0
--applications Name=Spark \ --instance-type m5.xlarge --instance-count 2 --service-role EMR_DefaultRole_V2 --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole --configurations https://s3.amazonaws.com/amzn-s3-demo-bucket/myfolder/myConfig.jsonnota
Se incluyen caracteres de continuación de línea de Linux (\) para facilitar la lectura. Se pueden eliminar o utilizar en los comandos de Linux. En Windows, elimínelos o sustitúyalos por un signo de intercalación (^).
myConfig.json
:[ { "Classification": "spark-defaults", "Properties": { "spark.executor.memory": "2G" } } ]
Para crear un clúster con el valor de spark.executor.memory definido en 2g mediante la consola
Vaya hasta la nueva consola de Amazon EMR y seleccione Ir a la consola antigua en el panel de navegación lateral. Para más información sobre lo que puede esperar al cambiar a la consola antigua, consulte Uso de la consola antigua.
-
Elija Crear clúster e Ir a las opciones avanzadas.
-
Elija Spark.
-
En Edit software settings (Editar configuración de software), deje seleccionada la opción Enter configuration (Escribir la configuración) y especifique la siguiente configuración:
classification=spark-defaults,properties=[spark.executor.memory=2G]
-
Seleccione otras opciones, elija y, a continuación, elija Create cluster (Crear clúster).
Para configurar maximizeResourceAllocation
-
Cree un clúster con Spark instalado y
maximizeResourceAllocation
establecido en true utilizando el AWS CLI archivo almacenado en Amazon S3myConfig.json
, haciendo referencia a un archivo.aws emr create-cluster --release-label
emr-7.6.0
--applications Name=Spark \ --instance-type m5.xlarge --instance-count 2 --service-role EMR_DefaultRole_V2 --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole --configurations https://s3.amazonaws.com/amzn-s3-demo-bucket/myfolder/myConfig.jsonnota
Se incluyen caracteres de continuación de línea de Linux (\) para facilitar la lectura. Se pueden eliminar o utilizar en los comandos de Linux. En Windows, elimínelos o sustitúyalos por un signo de intercalación (^).
myConfig.json
:[ { "Classification": "spark", "Properties": { "maximizeResourceAllocation": "true" } } ]
nota
Con la versión 5.21.0 y posteriores de Amazon EMR, puede anular las configuraciones de clúster y especificar las clasificaciones de configuración adicionales para cada grupo de instancias en un clúster en ejecución. Para ello, utilice la consola Amazon EMR, el AWS Command Line Interface (AWS CLI) o el AWS SDK. Para obtener más información, consulte Suministrar una configuración para un grupo de instancias en un clúster en ejecución.
Migración de Apache Log4j 1.x a Log4j 2.x
Las versiones 3.2.x y anteriores de Apache Sparklog4j.properties
para configurar Log4j en los procesos de Spark. Las versiones 3.3.0 y posteriores de Apache Spark utilizan Apache Log4j 2.x y el archivo log4j2.properties
para configurar Log4j en los procesos de Spark.
Si ha configurado Apache Spark Log4j con una versión de Amazon EMR anterior a la 6.8.0, debe eliminar la clasificación de configuración spark-log4j
heredada y completar la migración al formato de clave y clasificación de configuración spark-log4j2
para poder actualizar a la versión 6.8.0 o posteriores de Amazon EMR. La clasificación spark-log4j
heredada provoca un error ValidationException
en la creación del clúster en las versiones 6.8.0 y posteriores de Amazon EMR. No se le cobrará nada en caso de un error relacionado con la incompatibilidad de Log4j, pero deberá eliminar la clasificación de configuración spark-log4j
extinta para continuar.
Para obtener más información sobre la migración de Apache Log4j 1.x a Log4j 2.x, consulte Apache Log4j Migration Guide
nota
Con Amazon EMR, Apache Spark usa un archivo log4j2.properties
en lugar del archivo .xml descrito en Apache Log4j Migration Guide