Configurar Spark - Amazon EMR

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 con clasificaciones de configuración. Para obtener más información sobre cómo las clasificaciones de configuración, consulte Configuración de aplicaciones.

Las clasificaciones de configuración de Spark en Amazon EMR incluyen las siguientes:

  • spark: establece la propiedad maximizeResourceAllocation en true o false. Si es cierto, Amazon configura EMR automáticamente las spark-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 archivo spark-defaults.conf. Para obtener más información, consulte Spark configuration en la documentación de Spark.

  • spark-env: establece los valores del archivo spark-env.sh. Para obtener más información, consulte Environment variables en la documentación de Spark.

  • spark-hive-site: establece los valores del archivo hive-site.xml para Spark.

  • spark-log4j— (Amazon versión 6.7.x y EMR versiones anteriores) Establece los valores del log4j.properties archivo. Para obtener más información, consulte el archivo log4j.properties.template en GitHub.

  • spark-log4j2— (Amazon versión 6.8.0 y EMR versiones posteriores) Establece los valores del log4j2.properties archivo. Para obtener más información, consulte el archivo log4j2.properties.template en GitHub.

  • spark-metrics: establece los valores del archivo metrics.properties. Para conocer la configuración y obtener más información, consulte el archivo metrics.properties.template en 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.

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.

Amazon establece los valores predeterminados de Spark EMR
Opción Descripción Valor predeterminado
spark.executor.memory

Cantidad de memoria que utilizar por proceso de ejecutor. Por ejemplo: 1g, 2g.

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.

true(con Amazon EMR 4.4.0 y versiones posteriores)

nota

Amazon 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 startsWith, contains y endsWith en el metaalmacén de Hive.

nota

Glue no admite la inserción de predicados para startsWith, contains ni endsWith. Si utiliza el metaalmacén de Glue y detecta errores debido a la inserción de predicados para estas funciones, establezca esta configuración en false.

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. maximizeResourceAllocationEs 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" } } ]
Opciones configuradas en spark-defaults cuando maximizeResourceAllocation está habilitado
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 spark.dynamicAllocation.enabled defina explícitamente en true al mismo tiempo.

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.

Configuración de la retirada de nodos de Spark
Opción Descripción Valor predeterminado

spark.blacklist.decommissioning.enabled

Cuando se establece entrue, Spark deny muestra los nodos que se encuentran en el decommissioning estado en. YARN Spark no programa tareas nuevas en los ejecutores activos en ese nodo. A las tareas que se encuentran en ejecución se les permite completarse.

true

spark.blacklist.decommissioning.timeout

Cantidad de tiempo que permanece en la lista de denegación un nodo cuyo estado es decommissioning. De forma predeterminada, este valor se establece en una hora, que también es el valor predeterminado de yarn.resourcemanager.decommissioning.timeout. Para asegurarse de que un nodo permanece en la lista de denegación durante todo su periodo de retirada, establezca un valor mayor o igual que yarn.resourcemanager.decommissioning.timeout. Una vez transcurrido el tiempo de espera de desmantelamiento, el nodo pasa a un decommissioned estado y Amazon EMR puede terminar la instancia del EC2 nodo. Si hay alguna tarea en ejecución cuando finaliza el tiempo de espera, se pierde o se cancela y se reprograma en los ejecutores activos de los otros nodos.

1h

spark.decommissioning.timeout.threshold

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 porspark.resourceManager.cleanupExpiredHost) sin esperar a que el nodo pase a un estado fuera de servicio. Esto permite que Spark gestione mejor las terminaciones de instancias de spot, ya que las instancias de spot se retiran dentro de un tiempo de espera de 20 segundos, independientemente del valor de yarn.resourcemager.decommissioning.timeout, que posiblemente no proporcione a los demás nodos tiempo suficiente para leer los archivos de reorganización.

20s

spark.resourceManager.cleanupExpiredHost

Cuando se establece en true, Spark anula el registro de todos los datos almacenados en la memoria caché y los bloques de reorganización que se almacenan en ejecutores en los nodos que tienen el estado decommissioned. Esto acelera el proceso de recuperación.

true

spark.stage.attempt.ignoreOnDecommissionFetchFailure

Cuando se establece en true, ayuda a evitar errores en las etapas de Spark y que al final el trabajo no se complete debido a un número excesivo de recuperaciones desde los nodos retirados. Los errores en las recuperaciones de los bloques de reorganización de un nodo con el estado decommissioned no cuentan para el cálculo del número máximo de errores de recuperación consecutivos.

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.json
    nota

    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
  1. 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.

  2. Elija Crear clúster e Ir a las opciones avanzadas.

  3. Elija Spark.

  4. 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]
  5. 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.json
    nota

    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 Spark utilizan la versión heredada de Apache Log4j 1.x y el archivo log4j.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 y Spark Log4j 2 Template en GitHub.

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. Además, no recomendamos utilizar el método de puente de Log4j 1.x para llevar a cabo la conversión a Log4j 2.x.