Knowledge Center Monthly Newsletter - March 2025
Stay up to date with the latest from the Knowledge Center. See all new and updated Knowledge Center articles published in the last month and re:Post’s top contributors.
Como faço para acessar os logs do driver do Spark em um cluster do Amazon EMR?
Quero acessar os logs do driver do Apache Spark em um cluster do Amazon EMR e solucionar problemas em uma aplicação Spark.
Resolução
Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solução de problemas da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.
No Amazon EMR, o Spark é executado como uma aplicação YARN e é compatível com os modos de implantação de cliente e de cluster.
Trabalhos no modo cliente
O modo cliente é o modo de implantação padrão. No modo cliente, o driver do Spark é executado no host em que o comando spark-submit é executado. Ao executar o comando spark-submit com o cliente --deploy-mode client no nó primário, você recebe os logs do driver na janela do terminal. O Amazon EMR não arquiva esses logs por padrão. Para capturar os logs, salve a saída do comando spark-submit em um arquivo.
Exemplo de comando:
spark-submit [--deploy-mode client] ... 1>output.log 2>error.log
Quando você usa uma etapa do Amazon EMR para enviar uma aplicação Spark, o Amazon EMR arquiva os logs do driver no arquivo stderr.gz no Amazon Simple Storage Service (Amazon S3). O caminho do arquivo é semelhante ao seguinte:
s3://aws-logs-111111111111-us-east-1/elasticmapreduce/j-35PUYZBQVIJNM/steps/s-2M809TD67U2IA/stderr.gz
Para obter mais informações, consulte Exibir arquivos de log arquivados no Amazon S3.
Para acessar os logs do driver do Spark, faça o download dos logs de etapas em uma instância do Amazon Elastic Compute Cloud (Amazon EC2) e, em seguida, pesquise avisos e erros.
Conclua as etapas a seguir:
-
Execute o seguinte comando sync para baixar os logs da etapa:
aws s3 sync s3://aws-logs-111111111111-us-east-1/elasticmapreduce/j-35PUYZBQVIJNM/steps/s-2M809TD67U2IA/ s-2M809TD67U2IA/
-
Execute o comando a seguir para abrir a pasta de logs da etapa:
cd s-2M809TD67U2IA/
-
Execute o comando a seguir para descompactar o arquivo de log:
find . -type f -exec gunzip filename\;
Observação: substitua filename pelo nome do seu arquivo.
-
Execute o comando a seguir para identificar o ID da aplicação YARN do log do modo cluster:
grep "Client: Application report for" * | tail -n 1
-
Execute o comando a seguir para encontrar erros e avisos no log do modo cliente:
egrep "WARN|ERROR" *
Também é possível usar aplicações como JupyterHub, Apache Livy ou Apache Zeppelin como cliente para enviar uma aplicação Spark ao cluster. As aplicações armazenam os logs do driver nos logs da aplicação na pasta /mnt/var/log/ no nó primário.
Também é possível encontrar os logs compactados no caminho s3://awsexamplebucket/JOBFLOW_ID/node/MASTER_ID/applications/ do Amazon S3.
Se você usa o Zeppelin, é possível encontrar os logs do driver do Spark em /mnt/var/log/zeppelin/zeppelin-interpreter-spark-##########.log.
No Jupyter, é possível encontrar os logs do driver nos logs /mnt/var/log/livy/livy-livy-server.out do Livy.
Trabalhos no modo de cluster
Quando você envia a aplicação Spark no modo de cluster, o processo do driver é executado no contêiner principal da aplicação. A aplicação principal é o primeiro contêiner executado quando a aplicação Spark é executada. O cliente registra o relatório da aplicação YARN.
Para obter os logs do driver, conclua as etapas a seguir:
-
Obtenha o ID da aplicação nos logs do cliente.
Exemplo de saída com o ID da aplicação application_1572839353552_0008.19/11/04 05:24:42 INFO Client: Application report for application_1572839353552_0008 (state: ACCEPTED)
-
Identifique os logs do contêiner primário da aplicação.
Exemplo de lista de logs da aplicação Spark:`s3://aws-logs-111111111111-us-east-1/elasticmapreduce/j-35PUYZBQVIJNM/containers/application_1572839353552_0008/container_1572839353552_0008_01_000001/stderr.gz` `s3://aws-logs-111111111111-us-east-1/elasticmapreduce/j-35PUYZBQVIJNM/containers/application_1572839353552_0008/container_1572839353552_0008_01_000001/stdout.gz` `s3://aws-logs-111111111111-us-east-1/elasticmapreduce/j-35PUYZBQVIJNM/containers/application_1572839353552_0008/container_1572839353552_0008_01_000002/stderr.gz` `s3://aws-logs-111111111111-us-east-1/elasticmapreduce/j-35PUYZBQVIJNM/containers/application_1572839353552_0008/container_1572839353552_0008_01_000002/stdout.gz`
Observação: o primeiro contêiner na lista é sempre o contêiner principal. Na lista anterior, o contêiner primário é container_1572839353552_0008_01_000001.
-
Execute o comando sync a seguir para baixar os logs do contêiner primário da aplicação em uma instância:
aws s3 sync s3://aws-logs-111111111111-us-east-1/elasticmapreduce/j-35PUYZBQVIJNM/containers/application_1572839353552_0008/ application_1572839353552_0008/
-
Execute o comando a seguir para abrir a pasta de log da aplicação Spark:
cd application_1572839353552_0008/
-
Execute o comando a seguir para descompactar o arquivo de log:
find . -type f -exec gunzip {} \;
-
Execute o comando a seguir para pesquisar erros e avisos em todos os logs do contêiner:
egrep -Ril "ERROR|WARN" . | xargs egrep "WARN|ERROR"
-
Execute o comando a seguir para obter o endereço do nó em que o contêiner primário da aplicação foi executado. Em um cluster em execução, é possível usar a CLI do YARN para obter os logs do contêiner da aplicação YARN:
yarn logs -applicationId application_1585844683621_0001 | grep 'Container: container_1585844683621_0001_01_000001'
Saída esperada:
20/04/02 19:15:09 INFO client.RMProxy: Connecting to ResourceManager at ip-###-##-##-##.us-west-2.compute.internal/###.##.##.##:8032 Container: container_1585844683621_0001_01_000001 on ip-###-##-##-##.us-west-2.compute.internal_8041
-
Para aplicações Spark que você envia no modo cluster, execute o seguinte comando para extrair os logs do contêiner primário da aplicação:
yarn logs -applicationId application_1585844683621_0001 -containerId container_1585844683621_0001_01_000001 -nodeAddress ip-###-##-##-##.us-west-2.compute.internal
Observação: substitua applicationId pelo ID da aplicação, containerId pelo ID do seu contêiner e nodeAddress ip pelo endereço do seu nó.
Informações relacionadas

Conteúdo relevante
- feita há 2 diaslg...
- Resposta aceitafeita há 2 meseslg...
- feita há 3 meseslg...
- Resposta aceitafeita há 20 diaslg...
- feita há 4 diaslg...
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há 4 anos
- AWS OFICIALAtualizada há 7 meses