Introducción a Amazon EMR en EKS - Amazon EMR

Introducción a Amazon EMR en EKS

Este tema le ayuda a empezar a utilizar Amazon EMR en EKS mediante la implementación de una aplicación de Spark en un clúster virtual. Incluye pasos para configurar los permisos correctos e iniciar un trabajo. Antes de comenzar, asegúrese de que ha realizado los pasos que se detallan en Configuración de Amazon EMR en EKS. Esto le ayuda a obtener herramientas como la configuración de la AWS CLI antes de crear el clúster virtual. Para ver otras plantillas que pueden ayudarle a empezar, consulte la Guía de prácticas recomendadas para contenedores de EMR en GitHub.

Necesitará la siguiente información de los pasos de configuración:

  • ID de clúster virtual para el clúster de Amazon EKS y el espacio de nombres de Kubernetes registrado con Amazon EMR

    importante

    Al crear un clúster de EKS, asegúrese de utilizar m5.xlarge como tipo de instancia, o cualquier otro tipo de instancia con una CPU y una memoria superiores. El uso de un tipo de instancia con menos CPU o memoria que m5.xlarge puede provocar un error del trabajo debido a la insuficiencia de recursos disponibles en el clúster.

  • Nombre del rol de IAM utilizado para la ejecución del trabajo

  • Etiqueta de versión de la versión de Amazon EMR (por ejemplo, emr-6.4.0-latest)

  • Objetivos de destino para el registro y la supervisión:

    • Nombre del grupo de registros de Amazon CloudWatch y el prefijo del flujo de registro

    • Ubicación de Amazon S3 para almacenar registros de eventos y contenedores

importante

Los trabajos de Amazon EMR en EKS utilizan Amazon CloudWatch y Amazon S3 como objetivos de destino para la supervisión y el registro. Puede supervisar el progreso del trabajo y solucionar los errores al consultar los registros de trabajos enviados a estos destinos. Para habilitar el registro, la política de IAM asociada con el rol de IAM para la ejecución del trabajo debe tener los permisos necesarios para acceder a los recursos de destino. Si la política de IAM no tiene los permisos necesarios, debe seguir los pasos descritos en Actualizar la política de confianza del rol de ejecución de trabajos, Configurar una ejecución de trabajo para usar los registros de Amazon S3 y Configurar una ejecución de trabajo para usar Registros de CloudWatch antes de ejecutar este trabajo de muestra.

Ejecutar una aplicación de Spark

Siga estos pasos para ejecutar una aplicación de Spark en Amazon EMR en EKS. El archivo entryPoint de aplicación de una aplicación de Python de Spark se encuentra en s3://REGION.elasticmapreduce/emr-containers/samples/wordcount/scripts/wordcount.py. La REGIÓN es la región en la que reside su clúster virtual de Amazon EMR en EKS, como us-east-1.

  1. Actualice la política de IAM para el rol de ejecución de trabajos con los permisos necesarios, tal como se demuestra en las siguientes instrucciones de política.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "ReadFromLoggingAndInputScriptBuckets", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::*.elasticmapreduce", "arn:aws:s3:::*.elasticmapreduce/*", "arn:aws:s3:::amzn-s3-demo-destination-bucket", "arn:aws:s3:::amzn-s3-demo-destination-bucket/*", "arn:aws:s3:::amzn-s3-demo-logging-bucket", "arn:aws:s3:::amzn-s3-demo-logging-bucket/*" ] }, { "Sid": "WriteToLoggingAndOutputDataBuckets", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-destination-bucket/*", "arn:aws:s3:::amzn-s3-demo-logging-bucket/*" ] }, { "Sid": "DescribeAndCreateCloudwatchLogStream", "Effect": "Allow", "Action": [ "logs:CreateLogStream", "logs:DescribeLogGroups", "logs:DescribeLogStreams" ], "Resource": [ "arn:aws:logs:*:*:*" ] }, { "Sid": "WriteToCloudwatchLogs", "Effect": "Allow", "Action": [ "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:*:*:log-group:my_log_group_name:log-stream:my_log_stream_prefix/*" ] } ] }
    • La primera instrucción ReadFromLoggingAndInputScriptBuckets de esta política concede acceso a ListBucket y GetObjects a los siguientes buckets de Amazon S3:

      • REGION.elasticmapreduce: el bucket en el que se encuentra el archivo entryPoint de la aplicación.

      • amzn-s3-demo-destination-bucket: un bucket que usted define para los datos de salida.

      • amzn-s3-demo-logging-bucket: un bucket que usted define para los datos de registro.

    • La segunda instrucción de esta política otorga al trabajo permisos para escribir datos WriteToLoggingAndOutputDataBuckets en los buckets de salida y de registro, respectivamente.

    • La tercera instrucción DescribeAndCreateCloudwatchLogStream otorga al trabajo permisos para describir y crear Registros de Amazon CloudWatch.

    • La cuarta instrucción WriteToCloudwatchLogs concede permisos para escribir registros en un grupo de registros de Amazon CloudWatch denominado my_log_group_name en un flujo de registro llamado my_log_stream_prefix.

  2. Para ejecutar una aplicación de Python de Spark, use el siguiente comando. Sustituya todos los valores en cursiva roja reemplazables por los valores adecuados. La REGIÓN es la región en la que reside su clúster virtual de Amazon EMR en EKS, como us-east-1.

    aws emr-containers start-job-run \ --virtual-cluster-id cluster_id \ --name sample-job-name \ --execution-role-arn execution-role-arn \ --release-label emr-6.4.0-latest \ --job-driver '{ "sparkSubmitJobDriver": { "entryPoint": "s3://REGION.elasticmapreduce/emr-containers/samples/wordcount/scripts/wordcount.py", "entryPointArguments": ["s3://amzn-s3-demo-destination-bucket/wordcount_output"], "sparkSubmitParameters": "--conf spark.executor.instances=2 --conf spark.executor.memory=2G --conf spark.executor.cores=2 --conf spark.driver.cores=1" } }' \ --configuration-overrides '{ "monitoringConfiguration": { "cloudWatchMonitoringConfiguration": { "logGroupName": "my_log_group_name", "logStreamNamePrefix": "my_log_stream_prefix" }, "s3MonitoringConfiguration": { "logUri": "s3://amzn-s3-demo-logging-bucket" } } }'

    Los datos de salida de este trabajo estarán disponibles en s3://amzn-s3-demo-destination-bucket/wordcount_output.

    También puede crear un archivo JSON con parámetros especificados para la ejecución del trabajo. A continuación, ejecute el comando start-job-run con una ruta al archivo JSON. Para obtener más información, consulte Enviar una ejecución de trabajo con StartJobRun. Para obtener más información sobre la configuración de los parámetros de ejecución del trabajo, consulte Opciones para configurar una ejecución de trabajo.

  3. Para ejecutar una aplicación de Spark SQL, use el siguiente comando. Sustituya todos los valores en cursiva roja por los valores adecuados. La REGIÓN es la región en la que reside su clúster virtual de Amazon EMR en EKS, como us-east-1.

    aws emr-containers start-job-run \ --virtual-cluster-id cluster_id \ --name sample-job-name \ --execution-role-arn execution-role-arn \ --release-label emr-6.7.0-latest \ --job-driver '{ "sparkSqlJobDriver": { "entryPoint": "s3://query-file.sql", "sparkSqlParameters": "--conf spark.executor.instances=2 --conf spark.executor.memory=2G --conf spark.executor.cores=2 --conf spark.driver.cores=1" } }' \ --configuration-overrides '{ "monitoringConfiguration": { "cloudWatchMonitoringConfiguration": { "logGroupName": "my_log_group_name", "logStreamNamePrefix": "my_log_stream_prefix" }, "s3MonitoringConfiguration": { "logUri": "s3://amzn-s3-demo-logging-bucket" } } }'

    A continuación se muestra un archivo de consulta SQL de ejemplo. Debe tener un almacén de archivos externo, como S3, donde se almacenen los datos de las tablas.

    CREATE DATABASE demo; CREATE EXTERNAL TABLE IF NOT EXISTS demo.amazonreview( marketplace string, customer_id string, review_id string, product_id string, product_parent string, product_title string, star_rating integer, helpful_votes integer, total_votes integer, vine string, verified_purchase string, review_headline string, review_body string, review_date date, year integer) STORED AS PARQUET LOCATION 's3://URI to parquet files'; SELECT count(*) FROM demo.amazonreview; SELECT count(*) FROM demo.amazonreview WHERE star_rating = 3;

    El resultado de este trabajo estará disponible en los registros stdout del controlador en S3 o CloudWatch, según la monitoringConfiguration que se haya configurado.

  4. También puede crear un archivo JSON con parámetros especificados para la ejecución del trabajo. A continuación, ejecute el comando start-job-run con una ruta al archivo JSON. Para obtener más información, consulte Enviar una ejecución de trabajo. Para obtener más información sobre la configuración de los parámetros de ejecución de trabajo, consulte Opciones para configurar una ejecución de trabajo.

    Para supervisar el progreso del trabajo o para depurar errores, puede inspeccionar los registros cargados en Amazon S3, Registros de CloudWatch o ambos. Consulte la ruta de registro en Amazon S3 en Configurar una ejecución de trabajo para usar registros de S3 y, para los registros de CloudWatch, en Configurar una ejecución de trabajo para usar Registros de CloudWatch. Para ver los registros en CloudWatch Logs, siga las instrucciones que se indican a continuación.

    Supervisión mediante los registros de CloudWatch
importante

Los trabajos tienen una política de reintentos configurada de forma predeterminada. Para obtener información sobre cómo modificar o deshabilitar la configuración, consulte Uso de políticas de reintentos de trabajos.