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
Puedes configurar Spark en Amazon EMR
Las clasificaciones de configuración de Spark en Amazon EMR incluyen las siguientes:
-
spark
: establece la propiedadmaximizeResourceAllocation
en true o false. Si es cierto, Amazon configura EMR automáticamente lasspark-defaults
propiedades en función de la configuración del 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
— (Amazon versión 6.7.x y EMR versiones anteriores) Establece los valores dellog4j.properties
archivo. Para obtener más información, consulte el archivo log4j.properties.templateen GitHub. -
spark-log4j2
— (Amazon versión 6.8.0 y EMR versiones posteriores) Establece los valores dellog4j2.properties
archivo. 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 vas a migrar cargas de trabajo de Spark EMR a Amazon desde otra plataforma, te recomendamos que pruebes tus cargas de trabajo con la Amazon establece los valores predeterminados de Spark EMR antes de añadir configuraciones personalizadas. La mayoría de los clientes observan mejoras de rendimiento con nuestra configuración predeterminada.
Temas
- Amazon establece los valores predeterminados de Spark EMR
- Configuración de la recolección de basura de Spark en Amazon EMR 6.1.0
- Uso de maximizeResourceAllocation
- Configuración del comportamiento de retirada de nodos
- ThriftServer Variable de entorno Spark
- Cambio de la configuración predeterminada de Spark
- Migración de Apache Log4j 1.x a Log4j 2.x
Amazon establece los valores predeterminados de Spark EMR
En la siguiente tabla se muestra cómo Amazon EMR establece los valores predeterminados 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 el servicio Spark Shuffle. |
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 recolección de basura de Spark en Amazon EMR 6.1.0
Si se establecen configuraciones de recolección de basura personalizadas con spark.driver.extraJavaOptions
Amazon 6.1, se spark.executor.extraJavaOptions
produce un error al iniciar el controlador o ejecutor con Amazon EMR 6.1 debido a un conflicto de configuración de recolección de basura con Amazon EMR 6.1.0. Para Amazon EMR 6.1.0, la configuración de recolección de basura predeterminada se establece mediante spark.driver.defaultJavaOptions
yspark.executor.defaultJavaOptions
. Esta configuración solo se aplica a Amazon EMR 6.1.0. JVMaún se pueden configurar opciones no relacionadas con la recolección de basura, como las que permiten configurar logging (-verbose:class
). 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
. maximizeResourceAllocation
Es específico de AmazonEMR. Cuando se habilitamaximizeResourceAllocation
, Amazon EMR calcula el número máximo de recursos informáticos y de memoria disponibles para un ejecutor en una instancia del grupo de instancias principal. A continuación, establece la configuración spark-defaults
correspondiente en función de los valores máximos calculados.
Amazon EMR calcula los recursos informáticos y de memoria máximos disponibles para un ejecutor en función de 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 EMR usa Amazon puede no ser la mejor para sus clústeres, por lo que no recomendamos usar la configuración predeterminada cuando se utilice la asignación máxima de recursos. Configura ajustes personalizados para los clústeres de tu flota de instancias.
nota
No debes usar la maximizeResourceAllocation
opción en clústeres con otras aplicaciones distribuidas, por ejemploHBase. Amazon EMR usa YARN configuraciones personalizadas para las aplicaciones distribuidas, lo que puede entrar en conflicto con las aplicaciones de Spark maximizeResourceAllocation
y provocar que fallen.
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 |
Los contenedores tienen el doble de CPU núcleos disponibles. YARN |
spark.driver.memory | Cantidad de memoria que se utilizará para el proceso del controlador, es decir, dónde SparkContext se 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 Spark puede ejecutarse en la instancia principal o en una de las principales (por ejemplo, en los modos YARN cliente y clúster, respectivamente), esto se establece en función del tipo de instancia más pequeño 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 EMR versión 5.9.0 y posteriores de Amazon, Spark en Amazon EMR incluye un conjunto de funciones que ayudan a garantizar que Spark gestione correctamente la terminación de nodos debido a un cambio de tamaño manual o a una solicitud de política de escalado automático. Amazon EMR implementa un mecanismo de rechazo de listados en Spark que se basa en el mecanismo de YARN desmantelamiento. 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 spark.decommissioning.timeout.threshold
configuración se agregó en la EMR versión 5.11.0 de Amazon para mejorar la resiliencia de Spark cuando se utilizan instancias puntuales. 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 EMR versión 5.11.0 o posterior de Amazon. Se especifica en segundos. Cuando un nodo pasa al estado de desmantelamiento, si el host lo va a dar de baja en un período de tiempo igual o inferior a este valor, Amazon EMR no solo deniega la lista del nodo, sino que también limpia el estado del host (según lo especificado por |
|
|
Cuando se establece en |
|
|
Cuando se establece en |
true |
ThriftServer Variable de entorno Spark
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 la configuración mediante la consola CLI o.
Para crear un clúster con spark.executor.memory establecido en 2g mediante el 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.3.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
Ve a la nueva EMR consola de Amazon y selecciona Cambiar a la consola anterior 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.3.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 Amazon 5.21.0 y EMR versiones posteriores, puedes anular las configuraciones de los clústeres y especificar clasificaciones de configuración adicionales para cada grupo de instancias de un clúster en ejecución. Para ello, utilice la EMR consola de Amazon, 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 EMR versión de Amazon anterior a la 6.8.0, debe eliminar la clasificación de spark-log4j
configuración antigua y migrar a la clasificación de spark-log4j2
configuración y al formato de clave antes de poder actualizar a Amazon EMR 6.8.0 o posterior. La spark-log4j
clasificación antigua provoca un ValidationException
error en la creación del clúster en las EMR versiones 6.8.0 y posteriores de Amazon. 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 AmazonEMR, Apache Spark usa un log4j2.properties
archivo en lugar del archivo.xml descrito en la Guía de migración de Apache Log4j