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
-
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/
-
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"
}
}'
-
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
-
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;
-
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
-
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"
}
}
}'
-
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.