Introducción a la AWS CLI - Amazon EMR

Introducción a la AWS CLI

Comience a utilizar EMR sin servidor desde la AWS CLI con comandos para crear una aplicación, ejecutar trabajos, comprobar el resultado de la ejecución de trabajos y eliminar sus recursos.

Paso 1: cree una aplicación de EMR sin servidor

Use el comando de emr-serverless create-application para crear su primera aplicación EMR sin servidor. Debe especificar el tipo de aplicación y la etiqueta de versión de Amazon EMR asociada a la versión de la aplicación que desee utilizar. El nombre de la aplicación es opcional.

Spark

Para crear una aplicación de Spark, use el siguiente comando.

aws emr-serverless create-application \ --release-label emr-6.6.0 \ --type "SPARK" \ --name my-application
Hive

Para crear una aplicación de Hive, use el siguiente comando.

aws emr-serverless create-application \ --release-label emr-6.6.0 \ --type "HIVE" \ --name my-application

Anote el ID de aplicación devuelto en el resultado. Utilizará el ID para iniciar la aplicación y durante el envío del trabajo, que en adelante se denominará application-id.

Antes de continuar con Paso 2: envíe una ejecución de trabajo a su aplicación EMR sin servidor, asegúrese de que su aplicación haya alcanzado el estado CREATED con la API de get-application.

aws emr-serverless get-application \ --application-id application-id

EMR sin servidor crea trabajadores para adaptarse a los trabajos solicitados. De forma predeterminada, se crean bajo demanda, pero también puede especificar una capacidad preinicializada estableciendo el parámetro initialCapacity al crear la aplicación. También puede limitar la capacidad máxima total que puede utilizar una aplicación con el parámetro maximumCapacity. Para más información sobre estas opciones, consulte Configuración de una aplicación cuando se trabaja con EMR sin servidor.

Paso 2: envíe una ejecución de trabajo a su aplicación EMR sin servidor

Ahora su aplicación EMR sin servidor está lista para ejecutar trabajos.

Spark

En este paso, utilizamos un script de PySpark para calcular el número de apariciones de palabras únicas en varios archivos de texto. Un bucket de S3 público y de solo lectura almacena tanto el script como el conjunto de datos. La aplicación envía el archivo de salida y los datos de registro del tiempo de ejecución de Spark a los directorios /output y /logs del bucket de S3 que creó.

Para ejecutar un trabajo de Spark
  1. Use el siguiente comando para copiar el script de ejemplo que ejecutaremos en su nuevo bucket.

    aws s3 cp s3://us-east-1.elasticmapreduce/emr-containers/samples/wordcount/scripts/wordcount.py s3://amzn-s3-demo-bucket/scripts/
  2. En el siguiente comando, sustituya application-id por el ID de la aplicación. Sustituya job-role-arn por el ARN del rol del tiempo de ejecución en el que creó Crear un rol de tiempo de ejecución del trabajo. Sustituya job-run-name por el nombre con el que desee llamar a su ejecución de trabajos. Sustituya todas cadenas amzn-s3-demo-bucket por el bucket de Amazon S3 que creó y añada el /output a la ruta. Esto crea una nueva carpeta en su bucket donde EMR sin servidor puede copiar los archivos de salida de la aplicación.

    aws emr-serverless start-job-run \ --application-id application-id \ --execution-role-arn job-role-arn \ --name job-run-name \ --job-driver '{ "sparkSubmit": { "entryPoint": "s3://amzn-s3-demo-bucket/scripts/wordcount.py", "entryPointArguments": ["s3://amzn-s3-demo-bucket/emr-serverless-spark/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" } }'
  3. Anote el ID de ejecución del trabajo que se devuelve como resultado. Sustituya job-run-id por este ID en los siguientes pasos.

Hive

En este tutorial, creamos una tabla, insertamos algunos registros y ejecutamos una consulta de agregación de recuentos. Para ejecutar el trabajo de Hive, primero cree un archivo que contenga todas las consultas de Hive para ejecutarlas como parte de un solo trabajo, cargue el archivo en S3 y especifique esta ruta de S3 cuando inicie el trabajo de Hive.

Para ejecutar un trabajo de Hive
  1. Cree un archivo llamado hive-query.ql que contenga todas las consultas que desee ejecutar en su trabajo de Hive.

    create database if not exists emrserverless; use emrserverless; create table if not exists test_table(id int); drop table if exists Values__Tmp__Table__1; insert into test_table values (1),(2),(2),(3),(3),(3); select id, count(id) from test_table group by id order by id desc;
  2. Cargue hive-query.ql en el bucket de S3 con el comando siguiente.

    aws s3 cp hive-query.ql s3://amzn-s3-demo-bucket/emr-serverless-hive/query/hive-query.ql
  3. En el siguiente comando, sustituya application-id por su propio ID de aplicación. Sustituya job-role-arn por el ARN del rol del tiempo de ejecución en el que creó Crear un rol de tiempo de ejecución del trabajo. Sustituya todas las cadenas amzn-s3-demo-bucket por el bucket de Amazon S3 que creó y añada /output y /logs a la ruta. Esto crea nuevas carpetas en su bucket, donde EMR sin servidor puede copiar los archivos de registro y de salida de su aplicación.

    aws emr-serverless start-job-run \ --application-id application-id \ --execution-role-arn job-role-arn \ --job-driver '{ "hive": { "query": "s3://amzn-s3-demo-bucket/emr-serverless-hive/query/hive-query.ql", "parameters": "--hiveconf hive.log.explain.output=false" } }' \ --configuration-overrides '{ "applicationConfiguration": [{ "classification": "hive-site", "properties": { "hive.exec.scratchdir": "s3://amzn-s3-demo-bucket/emr-serverless-hive/hive/scratch", "hive.metastore.warehouse.dir": "s3://amzn-s3-demo-bucket/emr-serverless-hive/hive/warehouse", "hive.driver.cores": "2", "hive.driver.memory": "4g", "hive.tez.container.size": "4096", "hive.tez.cpu.vcores": "1" } }], "monitoringConfiguration": { "s3MonitoringConfiguration": { "logUri": "s3://amzn-s3-demo-bucket/emr-serverless-hive/logs" } } }'
  4. Anote el ID de ejecución del trabajo que se devuelve como resultado. Sustituya job-run-id por este ID en los siguientes pasos.

Paso 3: revise el resultado de la ejecución del trabajo

La ejecución del trabajo tarda normalmente de 3 a 5 minutos en completarse.

Spark

Puede comprobar el estado de su trabajo de Spark con el siguiente comando.

aws emr-serverless get-job-run \ --application-id application-id \ --job-run-id job-run-id

Con el destino del registro establecido en s3://amzn-s3-demo-bucket/emr-serverless-spark/logs, puede encontrar los registros de este trabajo específico en el que se está ejecutando s3://amzn-s3-demo-bucket/emr-serverless-spark/logs/applications/application-id/jobs/job-run-id.

En el caso de las aplicaciones Spark, EMR sin servidor envía los registros de eventos cada 30 segundos a la carpeta sparklogs en el destino del registro de S3. Cuando termine su trabajo, los registros de tiempo de ejecución de Spark correspondientes al controlador y los ejecutores se cargan en carpetas con el nombre adecuado según el tipo de trabajador, como un driver o un executor. El resultado del trabajo de PySpark se carga en s3://amzn-s3-demo-bucket/output/.

Hive

Puede comprobar el estado de su trabajo de Hive con el siguiente comando.

aws emr-serverless get-job-run \ --application-id application-id \ --job-run-id job-run-id

Con el destino del registro establecido en s3://amzn-s3-demo-bucket/emr-serverless-hive/logs, puede encontrar los registros de este trabajo específico en el que se está ejecutando s3://amzn-s3-demo-bucket/emr-serverless-hive/logs/applications/application-id/jobs/job-run-id.

Para las aplicaciones de Hive, EMR sin servidor carga continuamente el controlador Hive en la carpeta HIVE_DRIVER, y los registros de los trabajos de Tez en la carpeta TEZ_TASK del destino de registro de S3. Cuando la ejecución del trabajo alcance el estadoSUCCEEDED, el resultado de la consulta de Hive estará disponible en la ubicación de Amazon S3 que especificó en el campo monitoringConfiguration de configurationOverrides.

Paso 4: Limpiar

Cuando haya terminado de trabajar con este tutorial, considere eliminar los recursos que creó. Le recomendamos que libere recursos que no tenga intención de volver a utilizar.

Elimine la aplicación

Para eliminar la aplicación, utilice el comando siguiente.

aws emr-serverless delete-application \ --application-id application-id

Elimine su bucket de registro S3

Para eliminar su bucket de registro y salida de S3, utilice el siguiente comando. Sustituya amzn-s3-demo-bucket por el nombre real del bucket de S3 que creó en Preparar el almacenamiento para EMR sin servidor.

aws s3 rm s3://amzn-s3-demo-bucket --recursive aws s3api delete-bucket --bucket amzn-s3-demo-bucket

Elimine el rol de tiempo de ejecución de su trabajo

Para eliminar el rol de tiempo de ejecución, desasocie la política del rol. Entonces, puede eliminar tanto el rol como la política.

aws iam detach-role-policy \ --role-name EMRServerlessS3RuntimeRole \ --policy-arn policy-arn

Para eliminar el rol, utilice el comando siguiente.

aws iam delete-role \ --role-name EMRServerlessS3RuntimeRole

Para eliminar la política que se asoció al rol, utilice el siguiente comando.

aws iam delete-policy \ --policy-arn policy-arn

Para ver más ejemplos de cómo ejecutar trabajos de Spark y Hive, consulte Uso de configuraciones de Spark al ejecutar trabajos de EMR sin servidor y Uso de configuraciones de Hive al ejecutar trabajos de EMR sin servidor.