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
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://
. La REGION
.elasticmapreduce/emr-containers/samples/wordcount/scripts/wordcount.pyREGIÓN
es la región en la que reside su clúster virtual de Amazon EMR en EKS, como us-east-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 aListBucket
yGetObjects
a los siguientes buckets de Amazon S3:-
: el bucket en el que se encuentra el archivoREGION
.elasticmapreduceentryPoint
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
en un flujo de registro llamadomy_log_group_name
.my_log_stream_prefix
-
-
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. LaREGIÓN
es la región en la que reside su clúster virtual de Amazon EMR en EKS, comous-east-1
.aws emr-containers start-job-run \ --virtual-cluster-id
cluster_id
\ --namesample-job-name
\ --execution-role-arnexecution-role-arn
\ --release-labelemr-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_outputTambié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. -
Para ejecutar una aplicación de Spark SQL, use el siguiente comando. Sustituya todos los valores en
cursiva roja
por los valores adecuados. LaREGIÓN
es la región en la que reside su clúster virtual de Amazon EMR en EKS, comous-east-1
.aws emr-containers start-job-run \ --virtual-cluster-id
cluster_id
\ --namesample-job-name
\ --execution-role-arnexecution-role-arn
\ --release-labelemr-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. -
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.
-
Abra la consola de CloudWatch en https://console.aws.amazon.com/cloudwatch/
. -
En el panel Navegación, elija Registros. A continuación, elija Grupos de registros.
-
Elija el grupo de registros de Amazon EMR en EKS y, a continuación, consulte los eventos de registro cargados.
-
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.