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.
Empleos en Spark
Puedes ejecutar trabajos de Spark en una aplicación con el type
parámetro establecido enSPARK
. Los trabajos deben ser compatibles con la versión de Spark compatible con la versión de EMR lanzamiento de Amazon. Por ejemplo, cuando ejecutas trabajos con la EMR versión 6.6.0 de Amazon, tu trabajo debe ser compatible con Apache Spark 3.2.0. Para obtener información sobre las versiones de la aplicación para cada versión, consulte. Versiones de lanzamiento de Amazon EMR Serverless
Parámetros de trabajo de Spark
Cuando utilizas el StartJobRun
APIpara ejecutar un trabajo de Spark, puedes especificar los siguientes parámetros.
Parámetros necesarios
Función de ejecución de trabajos de Spark
executionRoleArn
Utilízalo ARN para especificar el IAM rol que usa tu aplicación para ejecutar los trabajos de Spark. Este rol debe contener los siguientes permisos:
-
Lea desde los buckets de S3 u otras fuentes de datos en las que residen sus datos
-
Lea los buckets o prefijos de S3 en los que reside su PySpark script o archivo JAR
-
Escriba en los cubos de S3 en los que desee escribir el resultado final
-
Escribe los registros en un bucket o prefijo de S3 que especifique
S3MonitoringConfiguration
-
Acceda a KMS las claves si las usa KMS para cifrar los datos de su bucket de S3
-
Acceso al catálogo de datos de AWS Glue si utilizas Spark SQL
Si tu trabajo de Spark lee o escribe datos en o desde otras fuentes de datos, especifica los permisos adecuados en esta IAM función. Si no le otorgas estos permisos al IAM rol, es posible que el trabajo no se ejecute correctamente. Para obtener más información, consulte Funciones de tiempo de ejecución de trabajos para Amazon EMR Serverless y Almacenar registros.
Parámetro del controlador de tareas de Spark
Se utiliza jobDriver
para proporcionar información al trabajo. El parámetro del controlador de tareas solo acepta un valor para el tipo de trabajo que desee ejecutar. Para un trabajo de Spark, el valor del parámetro essparkSubmit
. Puedes usar este tipo de trabajo para ejecutar Scala, Java PySpark, SparkR y cualquier otro trabajo compatible a través de Spark submit. Los trabajos de Spark tienen los siguientes parámetros:
-
sparkSubmitParameters
— Estos son los parámetros adicionales de Spark que quieres enviar al trabajo. Usa este parámetro para anular las propiedades predeterminadas de Spark, como la memoria del controlador o el número de ejecutores, como los definidos en los argumentos--conf
o--class
. -
entryPointArguments
— Esta es una matriz de argumentos que quieres pasar a tu archivo principal JAR o de Python. Debería manejar la lectura de estos parámetros mediante su código de punto de entrada. Separa cada argumento de la matriz con una coma. -
entryPoint
— Esta es la referencia en Amazon S3 al archivo principal JAR o de Python que desea ejecutar. Si utiliza Scala o JavaJAR, especifique la clase de entrada principalSparkSubmitParameters
utilizando el--class
argumento.
Para obtener más información, consulte Launching Applications with spark-submit
Parámetro de anulación de la configuración de Spark
Se utiliza configurationOverrides
para anular las propiedades de configuración a nivel de supervisión y de aplicación. Este parámetro acepta un JSON objeto con los dos campos siguientes:
-
monitoringConfiguration
‐ Utilice este campo para especificar el Amazon S3 URL (s3MonitoringConfiguration
) en el que desea que el trabajo EMR sin servidor almacene los registros de su trabajo de Spark. Asegúrese de haber creado este depósito con el mismo Cuenta de AWS que aloja su aplicación y en el mismo Región de AWS lugar en el que se ejecuta su trabajo. -
applicationConfiguration
— Para anular las configuraciones predeterminadas de las aplicaciones, puede proporcionar un objeto de configuración en este campo. Puede utilizar una sintaxis abreviada para proporcionar la configuración o puede hacer referencia al objeto de configuración en un archivo. JSON Los objetos de configuración se componen de una clasificación, propiedades y configuraciones anidadas opcionales. Las propiedades consisten en las configuraciones que desea anular en ese archivo. Puede especificar varias clasificaciones para varias aplicaciones en un único objeto. JSONnota
Las clasificaciones de configuración disponibles varían según la versión específica de EMR Serverless. Por ejemplo, las clasificaciones para el Log4j personalizado solo
spark-executor-log4j2
están disponibles en las versiones 6.8.0spark-driver-log4j2
y superiores.
Si utilizas la misma configuración en la anulación de una aplicación y en los parámetros de envío de Spark, los parámetros de envío de Spark tienen prioridad. El orden de prioridad de las configuraciones es el siguiente, de mayor a menor:
-
Configuración que proporciona EMR Serverless cuando se crea
SparkSession
. -
Configuración que se proporciona como parte del
sparkSubmitParameters
--conf
argumento. -
La configuración que se proporciona como parte de la aplicación se anula al iniciar un trabajo.
-
Configuración que proporciona como parte de la suya
runtimeConfiguration
al crear una aplicación. -
Configuraciones optimizadas que Amazon EMR utiliza para la versión.
-
Configuraciones de código abierto predeterminadas para la aplicación.
Para obtener más información sobre la declaración de configuraciones a nivel de aplicación y la anulación de las configuraciones durante la ejecución de un trabajo, consulteConfiguración de aplicaciones predeterminada para Serverless EMR.
Impulse la optimización dinámica de la asignación de recursos
Se utiliza dynamicAllocationOptimization
para optimizar el uso de los recursos en EMR Serverless. Al establecer esta propiedad true
en la clasificación de configuración de Spark, EMR Serverless debe optimizar la asignación de recursos de los ejecutores para alinear mejor la velocidad a la que Spark solicita y cancela ejecutores con la velocidad a la que EMR Serverless crea y libera trabajadores. De este modo, EMR Serverless reutiliza a los trabajadores de forma más óptima en todas las etapas, lo que reduce los costes al ejecutar tareas con varias etapas y, al mismo tiempo, mantener el mismo rendimiento.
Esta propiedad está disponible en todas las EMR versiones de Amazon.
El siguiente es un ejemplo de clasificación de configuraciones condynamicAllocationOptimization
.
[ { "Classification": "spark", "Properties": { "dynamicAllocationOptimization": "true" } } ]
Tenga en cuenta lo siguiente si utiliza la optimización de asignación dinámica:
-
Esta optimización está disponible para los trabajos de Spark para los que has activado la asignación dinámica de recursos.
-
Para lograr la mejor rentabilidad, te recomendamos configurar un límite de escalado superior para los trabajadores, utilizando la configuración a nivel de trabajo
spark.dynamicAllocation.maxExecutors
o la configuración de capacidad máxima a nivel de aplicación en función de tu carga de trabajo. -
Es posible que no vea una mejora de costes en los trabajos más sencillos. Por ejemplo, si tu trabajo se ejecuta en un conjunto de datos pequeño o termina de ejecutarse en una etapa, es posible que Spark no necesite un mayor número de ejecutores ni varios eventos de escalado.
-
Los trabajos con una secuencia de una etapa grande, etapas más pequeñas y, después, una etapa más grande pueden experimentar una regresión en el tiempo de ejecución del trabajo. Dado que EMR Serverless utiliza los recursos de manera más eficiente, es posible que haya menos trabajadores disponibles para las etapas más grandes, lo que prolongará el tiempo de ejecución.
Impulse las propiedades de los puestos
La siguiente tabla muestra las propiedades opcionales de Spark y sus valores predeterminados que puedes anular al enviar un trabajo de Spark.
Clave | Descripción | Valor predeterminado |
---|---|---|
spark.archives |
Una lista de archivos separados por comas que Spark extrae en el directorio de trabajo de cada ejecutor. Los tipos de archivos compatibles incluyen.jar , y
.tar.gz . .tgz .zip Para especificar el nombre del directorio que se va a extraer, añádalo # después del nombre del archivo que desee extraer. Por ejemplo, file.zip#directory . |
NULL |
spark.authenticate |
Opción que activa la autenticación de las conexiones internas de Spark. | TRUE |
spark.driver.cores |
El número de núcleos que utiliza el controlador. | 4 |
spark.driver.extraJavaOptions |
Opciones de Java adicionales para el controlador Spark. | NULL |
spark.driver.memory |
La cantidad de memoria que utiliza el controlador. | 14 G |
spark.dynamicAllocation.enabled |
Opción que activa la asignación dinámica de recursos. Esta opción aumenta o reduce el número de ejecutores registrados en la aplicación, en función de la carga de trabajo. | TRUE |
spark.dynamicAllocation.executorIdleTimeout |
El tiempo que un ejecutor puede permanecer inactivo antes de que Spark lo elimine. Esto solo se aplica si activas la asignación dinámica. | 60 |
spark.dynamicAllocation.initialExecutors |
El número inicial de ejecutores que se ejecutarán si activas la asignación dinámica. | 3 |
spark.dynamicAllocation.maxExecutors |
El límite superior del número de ejecutores si activas la asignación dinámica. | Para la versión 6.10.0 y versiones posteriores, Para la versión 6.9.0 y versiones anteriores, |
spark.dynamicAllocation.minExecutors |
El límite inferior del número de ejecutores si se activa la asignación dinámica. | 0 |
spark.emr-serverless.allocation.batch.size |
El número de contenedores que se van a solicitar en cada ciclo de asignación de ejecutores. Hay un intervalo de un segundo entre cada ciclo de asignación. | 20 |
spark.emr-serverless.driver.disk |
El disco del controlador Spark. | 20 G |
spark.emr-serverless.driverEnv. |
Opción que añade variables de entorno al controlador Spark. | NULL |
spark.emr-serverless.executor.disk |
El disco ejecutor de Spark. | 20 G |
spark.emr-serverless.memoryOverheadFactor |
Establece la sobrecarga de memoria para añadirla a la memoria del contenedor del controlador y del ejecutor. | 0.1 |
spark.emr-serverless.driver.disk.type |
El tipo de disco conectado al controlador Spark. | Estándar |
spark.emr-serverless.executor.disk.type |
El tipo de disco conectado a los ejecutores de Spark. | Estándar |
spark.executor.cores |
El número de núcleos que utiliza cada ejecutor. | 4 |
spark.executor.extraJavaOptions |
Opciones de Java adicionales para el ejecutor Spark. | NULL |
spark.executor.instances |
El número de contenedores ejecutores de Spark que se van a asignar. | 3 |
spark.executor.memory |
La cantidad de memoria que utiliza cada ejecutor. | 14 G |
spark.executorEnv. |
Opción que añade variables de entorno a los ejecutores de Spark. | NULL |
spark.files |
Una lista de archivos separados por comas para incluir en el directorio de trabajo de cada ejecutor. Puede acceder a las rutas de estos archivos en el ejecutor con. SparkFiles.get( |
NULL |
spark.hadoop.hive.metastore.client.factory.class |
La clase de implementación de Hive Metastore. | NULL |
spark.jars |
Jarros adicionales para añadirlos a la ruta de clases en tiempo de ejecución del controlador y los ejecutores. | NULL |
spark.network.crypto.enabled |
Opción que activa el cifrado basado en datos. AES RPC Esto incluye el protocolo de autenticación agregado en Spark 2.2.0. | FALSE |
spark.sql.warehouse.dir |
La ubicación predeterminada para las bases de datos y tablas administradas. | El valor de $PWD/spark-warehouse |
spark.submit.pyFiles |
Una lista separada por comas de .zip .egg , o
.py archivos para colocarlos en las aplicaciones de PYTHONPATH Python. |
NULL |
La siguiente tabla muestra los parámetros de envío predeterminados de Spark.
Clave | Descripción | Valor predeterminado |
---|---|---|
archives |
Una lista de archivos separados por comas que Spark extrae en el directorio de trabajo de cada ejecutor. | NULL |
class |
La clase principal de la aplicación (para aplicaciones Java y Scala). | NULL |
conf |
Una propiedad de configuración arbitraria de Spark. | NULL |
driver-cores |
El número de núcleos que utiliza el controlador. | 4 |
driver-memory |
La cantidad de memoria que utiliza el controlador. | 14 G |
executor-cores |
El número de núcleos que utiliza cada ejecutor. | 4 |
executor-memory |
La cantidad de memoria que utiliza el ejecutor. | 14 G |
files |
Una lista de archivos separados por comas para colocarlos en el directorio de trabajo de cada ejecutor. Puede acceder a las rutas de estos archivos en el ejecutor con. SparkFiles.get( |
NULL |
jars |
Lista de archivos jar separados por comas para incluirlos en las rutas de clases del controlador y del ejecutor. | NULL |
num-executors |
El número de ejecutores que se van a lanzar. | 3 |
py-files |
Una lista separada por comas de .zip .egg , o .py archivos para colocarlos en las aplicaciones de PYTHONPATH Python. |
NULL |
verbose |
Opción que activa una salida de depuración adicional. | NULL |
Ejemplos de Spark
El siguiente ejemplo muestra cómo utilizar el StartJobRun
API para ejecutar un script de Python. Para ver un end-to-end tutorial en el que se utiliza este ejemplo, consulteIntroducción a Amazon EMR Serverless. Puedes encontrar ejemplos adicionales de cómo ejecutar PySpark trabajos y añadir dependencias de Python en el repositorio EMRServerless Samples
aws emr-serverless start-job-run \ --application-id
application-id
\ --execution-role-arnjob-role-arn
\ --job-driver '{ "sparkSubmit": { "entryPoint": "s3://us-east-1.elasticmapreduce/emr-containers/samples/wordcount/scripts/wordcount.py", "entryPointArguments": ["s3://amzn-s3-demo-destination-bucket
/wordcount_output"], "sparkSubmitParameters": "--conf spark.executor.cores=1 --conf spark.executor.memory=4g --conf spark.driver.cores=1 --conf spark.driver.memory=4g --conf spark.executor.instances=1" } }'
En el siguiente ejemplo, se muestra cómo utilizar el StartJobRun
API para ejecutar un Spark. JAR
aws emr-serverless start-job-run \ --application-id
application-id
\ --execution-role-arnjob-role-arn
\ --job-driver '{ "sparkSubmit": { "entryPoint": "/usr/lib/spark/examples/jars/spark-examples.jar", "entryPointArguments": ["1"], "sparkSubmitParameters": "--class org.apache.spark.examples.SparkPi --conf spark.executor.cores=4 --conf spark.executor.memory=20g --conf spark.driver.cores=4 --conf spark.driver.memory=8g --conf spark.executor.instances=1" } }'