Conceitos básicos do Amazon EMR no EKS - Amazon EMR

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Conceitos básicos do Amazon EMR no EKS

Este tópico ajuda você a começar a usar o Amazon EMR no EKS ao implantar uma aplicação do Spark em um cluster virtual. Inclui etapas para configurar as permissões corretas e iniciar um trabalho. Antes de começar, siga as etapas em Configuração do Amazon EMR no EKS. Isso ajuda você a obter ferramentas como a AWS CLI configurada antes de criar seu cluster virtual. Para obter outros modelos que podem ajudar você a começar a usar, consulte nosso EMR Containers Best Practices Guide no GitHub.

Você precisará das seguintes informações para as etapas de configuração:

  • O ID do cluster virtual para o cluster do Amazon EKS e o namespace do Kubernetes registrado no Amazon EMR.

    Importante

    Ao criar um cluster do EKS, certifique-se de usar m5.xlarge como tipo de instância ou qualquer outro tipo de instância com CPU e memória superiores. Usar um tipo de instância com CPU ou memória inferior ao m5.xlarge, pode levar à falha do trabalho devido à insuficiência de recursos disponíveis no cluster.

  • O nome do perfil do IAM usado para a execução do trabalho.

  • O rótulo de versão da versão do Amazon EMR (por exemplo, emr-6.4.0-latest).

  • As metas de destino para o registro em log e o monitoramento:

    • O nome do grupo de logs do Amazon CloudWatch e o prefixo do fluxo de logs.

    • A localização do Amazon S3 para armazenar logs de eventos e de contêineres.

Importante

Os trabalhos do Amazon EMR no EKS usam o Amazon CloudWatch e o Amazon S3 como as metas de destino para o monitoramento e o registro em log. Você pode monitorar o progresso do trabalho e solucionar falhas ao visualizar os logs de trabalho enviados para esses destinos. Para ativar o registro em log, a política do IAM associada ao perfil do IAM para a execução do trabalho deve ter as permissões necessárias para acessar os recursos das metas. Se a política do IAM não tiver as permissões obrigatórias, você deverá seguir as etapas descritas em Atualização da política de confiança do perfil de execução de trabalho, Configuração de uma execução de trabalho para usar logs do Amazon S3 e Configuração de uma execução de trabalho para usar o CloudWatch Logs antes de executar este exemplo de trabalho.

Execução de uma aplicação do Spark

Siga as etapas a seguir para executar uma aplicação simples do Spark no Amazon EMR no EKS. O arquivo da aplicação entryPoint para a aplicação em Python do Spark está localizado em s3://REGION.elasticmapreduce/emr-containers/samples/wordcount/scripts/wordcount.py. A REGION corresponde à região na qual reside o cluster virtual do Amazon EMR no EKS, como us-east-1.

  1. Atualize a política do IAM para o perfil de execução de trabalho com as permissões necessárias, conforme demonstram as instruções de política a seguir.

    { "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/*" ] } ] }
    • A primeira instrução ReadFromLoggingAndInputScriptBuckets nesta política concede acesso para ListBucket e GetObjects aos seguintes buckets do Amazon S3:

      • REGION.elasticmapreduce: o bucket em que o arquivo da aplicação entryPoint está localizado.

      • amzn-s3-demo-destination-bucket: um bucket que você define para os dados de saída.

      • amzn-s3-demo-logging-bucket: um bucket que você define para os dados de registro em log.

    • A segunda instrução WriteToLoggingAndOutputDataBuckets nesta política concede ao trabalho as permissões para gravar dados em seus buckets de saída e de registro em log, respectivamente.

    • A terceira instrução DescribeAndCreateCloudwatchLogStream concede ao trabalho as permissões para descrever e criar com o Amazon CloudWatch Logs.

    • A quarta instrução WriteToCloudwatchLogs concede as permissões para gravar logs em um grupo de logs do Amazon CloudWatch denominado my_log_group_name em um fluxo de logs chamado my_log_stream_prefix.

  2. Para executar uma aplicação em Python do Spark, use o comando apresentado a seguir. Substitua todos os valores substituíveis destacados em itálico e em vermelho por valores apropriados. A REGION corresponde à região na qual reside o cluster virtual do Amazon EMR no 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" } } }'

    Os dados de saída deste trabalho estarão disponíveis em s3://amzn-s3-demo-destination-bucket/wordcount_output.

    Você também pode criar um arquivo JSON com parâmetros especificados para sua execução de trabalho. Em seguida, execute o comando start-job-run com um caminho para o arquivo JSON. Para ter mais informações, consulte Envio de uma execução de trabalho com StartJobRun. Para obter mais detalhes sobre como configurar parâmetros de execução de trabalho, consulte Opções para a configuração de uma execução de trabalho.

  3. Para executar uma aplicação em SQL do Spark, use o comando apresentado a seguir. Substitua todos os valores destacados em itálico e em vermelho por valores apropriados. A REGION corresponde à região na qual reside o cluster virtual do Amazon EMR no 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" } } }'

    Um arquivo de consulta SQL de exemplo é mostrado abaixo. Você deve ter um armazenamento de arquivos externo, como o S3, no qual os dados das tabelas são armazenados.

    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;

    A saída deste trabalho estará disponível nos logs stdout do driver no S3 ou no CloudWatch, dependendo do monitoringConfiguration que estiver configurado.

  4. Você também pode criar um arquivo JSON com parâmetros especificados para sua execução de trabalho. Em seguida, execute o comando start-job-run com um caminho para o arquivo JSON. Para obter mais informações, consulte Envio de uma execução de trabalho. Para obter mais detalhes sobre como configurar parâmetros de execução de trabalho, consulte Opções para a configuração de uma execução de trabalho.

    Para monitorar o progresso do trabalho ou depurar falhas, é possível inspecionar os logs carregados no Amazon S3, no CloudWatch Logs ou em ambos. Consulte o caminho do log no Amazon S3 em Configuração de uma execução de trabalho para usar logs do S3 e dos logs do CloudWatch em Configuração de uma execução de trabalho para usar o CloudWatch Logs. Para visualizar os logs no CloudWatch Logs, siga as instruções abaixo.

    • Abra o console do CloudWatch em https://console.aws.amazon.com/cloudwatch/.

    • No painel de navegação, selecione Logs. Em seguida, escolha Grupos de logs.

    • Escolha o grupo de logs do Amazon EMR no EKS e, em seguida, visualize os eventos de log carregados.

    Monitoramento usando os logs do CloudWatch
Importante

Os trabalhos têm uma política de repetição padrão configurada. Para obter informações sobre como modificar ou desabilitar a configuração, consulte Uso de políticas de repetição de trabalho.