Conceitos básicos da AWS CLI - Amazon EMR

Conceitos básicos da AWS CLI

Comece a usar o EMR Sem Servidor na AWS CLI com comandos para criar uma aplicação, executar trabalhos, verificar a saída da execução do trabalho e excluir recursos.

Etapa 1: criar uma aplicação do EMR Sem Servidor

Use o comando emr-serverless create-application para criar sua primeira aplicação do EMR Sem Servidor. Você precisa especificar o tipo de aplicação e o rótulo de lançamento do Amazon EMR associado à versão da aplicação que deseja usar. O nome da aplicação é opcional.

Spark

Para criar uma aplicação do Spark, execute o comando a seguir.

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

Para criar uma aplicação do Hive, execute o comando a seguir.

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

Anote o ID da aplicação retornado na saída. Você usará o ID para iniciar a aplicação e durante o envio do trabalho, depois chamado de application-id.

Antes de prosseguir para Etapa 2: enviar uma execução de trabalho à aplicação do EMR Sem Servidor, certifique-se de que a aplicação tenha atingido o estado CREATED com a API get-application.

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

O EMR Sem Servidor cria trabalhadores para acomodar seus trabalhos solicitados. Por padrão, eles são criados sob demanda, mas você também pode especificar uma capacidade pré-inicializada definindo o parâmetro initialCapacity ao criar a aplicação. Você também pode limitar a capacidade máxima total que uma aplicação pode usar com o parâmetro maximumCapacity. Para saber mais sobre essas opções, consulte Configuração de uma aplicação ao trabalhar com o EMR Sem Servidor.

Etapa 2: enviar uma execução de trabalho à aplicação do EMR Sem Servidor

Agora, a aplicação do EMR Sem Servidor está pronta para executar trabalhos.

Spark

Nesta etapa, usamos um script PySpark para calcular o número de ocorrências de palavras únicas em vários arquivos de texto. Um bucket do S3 público e somente leitura armazena o script e o conjunto de dados. A aplicação envia o arquivo de saída e os dados de log do runtime do Spark aos diretórios de /output e /logs no bucket do S3 que você criou.

Para executar um trabalho do Spark
  1. Use o comando a seguir para copiar o exemplo de script que executaremos no novo bucket.

    aws s3 cp s3://us-east-1.elasticmapreduce/emr-containers/samples/wordcount/scripts/wordcount.py s3://amzn-s3-demo-bucket/scripts/
  2. No comando a seguir, substitua application-id pelo ID da aplicação. Substitua job-role-arn pelo ARN do perfil de runtime que você criou em Criação de um perfil de runtime de trabalhos. Substitua job-run-name pelo nome que deseja chamar a execução do trabalho. Substitua todas as strings amzn-s3-demo-bucket pelo bucket do Amazon S3 que você criou e adicione /output ao caminho. Isso cria uma pasta no seu bucket na qual o EMR Sem Servidor pode copiar os arquivos de saída da aplicação.

    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 o ID de execução do trabalho retornado na saída. Substitua job-run-id por esse ID nas etapas a seguir.

Hive

Neste tutorial, criamos uma tabela, inserimos alguns registros e executamos uma consulta de agregação de contagem. Para executar o trabalho do Hive, primeiro crie um arquivo que contenha todas as consultas do Hive a serem executadas como parte de um único trabalho, faça upload do arquivo no S3 e especifique esse caminho do S3 ao iniciar o trabalho do Hive.

Para executar um trabalho do Hive
  1. Crie um arquivo chamado hive-query.ql que contenha todas as consultas que você deseja executar no trabalho do 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. Faça upload de hive-query.ql no bucket do S3 com o comando a seguir.

    aws s3 cp hive-query.ql s3://amzn-s3-demo-bucket/emr-serverless-hive/query/hive-query.ql
  3. No comando a seguir, substitua application-id pelo ID da sua aplicação. Substitua job-role-arn pelo ARN do perfil de runtime que você criou em Criação de um perfil de runtime de trabalhos. Substitua todas as strings amzn-s3-demo-bucket pelo bucket do Amazon S3 que você criou e adicione /output e /logs ao caminho. Isso cria pastas no bucket, nas quais o EMR Sem Servidor pode copiar os arquivos de saída e de log da aplicação.

    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 o ID de execução do trabalho retornado na saída. Substitua job-run-id por esse ID nas etapas a seguir.

Etapa 3: revisar a saída da execução do trabalho

A execução do trabalho normalmente leva de 3 a 5 minutos para ser concluída.

Spark

Você pode verificar o estado do trabalho do Spark com o comando a seguir.

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

Com o destino do log definido como s3://amzn-s3-demo-bucket/emr-serverless-spark/logs, você pode encontrar os logs desse trabalho específico executado em s3://amzn-s3-demo-bucket/emr-serverless-spark/logs/applications/application-id/jobs/job-run-id.

Em aplicações do Spark, o EMR Sem Servidor envia logs de eventos a cada 30 segundos para a pasta sparklogs no destino de log do S3. Quando o trabalho for concluído, os logs de runtime do Spark para o driver e os executores são enviados a pastas nomeadas apropriadamente pelo tipo de trabalhador, como driver ou executor. A saída do trabalho do PySpark é enviada para s3://amzn-s3-demo-bucket/output/.

Hive

Você pode verificar o estado do trabalho do Hive com o comando a seguir.

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

Com o destino do log definido como s3://amzn-s3-demo-bucket/emr-serverless-hive/logs, você pode encontrar os logs desse trabalho específico executado em s3://amzn-s3-demo-bucket/emr-serverless-hive/logs/applications/application-id/jobs/job-run-id.

Em aplicações do Hive, o EMR Sem Servidor faz upload contínuo do driver do Hive para a pasta HIVE_DRIVER e os logs de tarefas do Tez para a pasta TEZ_TASK do destino de log do S3. Depois que a execução do trabalho atinge o estado SUCCEEDED, a saída da consulta do Hive fica disponível no local do Amazon S3 que você especificou no campo monitoringConfiguration de configurationOverrides.

Etapa 4: limpar

Após terminar de trabalhar com este tutorial, considere excluir os recursos criados por você. É recomendável liberar recursos que você não pretende usar novamente.

Exclua a aplicação

Para excluir uma aplicação, use o comando a seguir.

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

Exclusão do bucket de logs do S3

Para excluir o bucket de registro em log e saída do S3, use o comando a seguir. Substitua amzn-s3-demo-bucket pelo nome real do bucket do S3 criado em Preparação do armazenamento do EMR Sem Servidor.

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

Exclusão do perfil de runtime do trabalho

Para excluir o perfil de runtime, separe a política do perfil. Em seguida, você pode excluir o perfil e a política.

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

Para excluir o perfil, use o comando a seguir.

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

Para excluir a política anexada ao perfil, use o comando a seguir.

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

Para obter mais exemplos de execução de trabalhos do Spark e do Hive, consulte Uso das configurações do Spark ao executar trabalhos do EMR Sem Servidor e Uso das configurações do Hive ao executar trabalhos do EMR Sem Servidor.