Como posso solucionar uma falha de um trabalho do Spark no Amazon EMR?
Quero solucionar uma falha em um trabalho do Apache Spark no Amazon EMR.
Breve descrição
Para solucionar uma falha de trabalhos do Spark no Amazon EMR no Amazon Elastic Compute Cloud (Amazon EC2), conclua as seguintes etapas:
- Para trabalhos do Spark enviados com --deploy-mode-client, verifique os logs das etapas para identificar a causa raiz da falha na etapa.
- Para trabalhos do Spark enviados com --deploy-mode-cluster, verifique primeiro os registros de etapas para identificar o ID da aplicação. Em seguida, verifique os logs mestres da aplicação para identificar a causa raiz da falha na etapa.
Para solucionar problemas de falha em trabalhos do Spark no Amazon EMR no Amazon Elastic Kubernetes Service (Amazon EKS), identifique a causa raiz da falha no trabalho do Spark. Para fazer isso, verifique os logs do driver do Amazon Simple Storage Service (Amazon S3) ou do Amazon CloudWatch.
Para solucionar problemas de falhas em trabalhos do Spark no Amazon EMR Serverless, identifique a causa raiz da falha do trabalho do Spark. Para fazer isso, verifique os detalhes da execução do trabalho no console da aplicação Amazon EMR Serverless e nos registros do driver.
Resolução
Solucionar problemas do Amazon EMR em trabalhos do Spark que falharam no Amazon EC2
Trabalhos no modo cliente
Quando um trabalho Spark é implantado no modo de cliente, os logs de etapas fornecem os parâmetros do trabalho e as mensagens de erro da etapa. Esses logs são arquivados no Amazon S3.
Para identificar a causa raiz da falha de uma etapa, baixe os logs da etapa para uma instância do Amazon EC2. Em seguida, procure avisos e erros. Conclua as seguintes etapas:
Para descompactar o arquivo de log das etapas, execute o seguinte comando:
find . -type f -exec gunzip {} \;
Para identificar o ID da aplicação YARN no log do modo cluster, execute o seguinte comando:
grep "Client: Application report for" * | tail -n 1
O arquivo de exemplo a seguir indica um problema de memória:
“ERRO SparkContext: Error initializing SparkContext.java.lang.IllegalArgumentException: Executor memory 134217728 must be at least 471859200. Please increase executor memory using the --executor-memory option or spark.executor.memory in Spark configuration.”
Para resolver o erro anterior, execute o comando spark-submit para enviar um trabalho com mais memória. Para obter mais informações, consulte Submitting applications no site do Apache Spark.
Exemplo:
spark-submit --deploy-mode client --executor-memory 4g --class org.apache.spark.examples.SparkPi /usr/lib/spark/examples/jars/spark-examples.jar
Trabalhos no modo de cluster
Para identificar o ID da plicação associada à falha na etapa do Spark, verifique o registro de etapas stderr. Os logs das etapas são arquivados no Amazon S3. Em seguida, identifique os logs primários da aplicação. Os trabalhos do Spark que são executados no modo cluster são executados no log primário da aplicação. O log primário da aplicação é o primeiro contêiner executado quando um trabalho do Spark é iniciado. No exemplo a seguir, container_1572839353552_0008_01_000001 é o primeiro contêiner dos logs primários da aplicação.
Exemplo:
s3://aws-logs-111111111111-us-east-1/elasticmapreduce/j-35PUYZBQVIJNM/containers/application_1572839353552_0008/container_1572839353552_0008_01_000001/stderr.gz
Depois de identificar os logs primários da aplicação, baixe-os para uma instância do Amazon EC2. Em seguida, procure avisos e erros.
Para descompactar o arquivo de log das etapas, execute o seguinte comando:
find . -type f -exec gunzip {} \;
Para pesquisar avisos e erros nos logs do contêiner, abra os logs do contêiner que estão na saída do seguinte comando:
egrep -Ril "ERROR|WARN" . | xargs egrep "WARN|ERROR"
Se um log de contêiner indicar um problema de memória, execute o seguinte comando spark-submit para enviar um trabalho com mais memória:
spark-submit --deploy-mode cluster --executor-memory 4g --class org.apache.spark.examples.SparkPi /usr/lib/spark/examples/jars/spark-examples.jar 1000
Solucionar problemas de trabalhos do Spark que falharam no Amazon EMR no Amazon EKS
Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solucionar erros da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.
Quando um trabalho do Spark é enviado ao Amazon EMR no Amazon EKS, os logs podem ser armazenados no Amazon S3 ou no CloudWatch. Certifique-se de verificar os logs do driver para ver se há falhas nos trabalhos do Spark. Além disso, use os comandos kubectl para obter mais detalhes relacionados aos logos do driver e do executor do trabalho do Spark em execução.
**Observação: os comandos **Kubectl funcionam somente para pods ativos. Quando os pods estão parados, você não pode executar os comandos kubectl.
Se você enviar um trabalho do Spark com o comando start-job-run, use os seguintes comandos kubectl:
kubectl get pods -n example-spark-namespace
Observação: substitua example-spark-namespace pelo namespace do Spark usado para iniciar o trabalho.
kubectl logs spark-example-pod-driver -n example-spark-namespace -c spark-kubernetes-driver
Observação: substitua example-spark-namespace pelo namespace do Spark usado para iniciar o trabalho e example-pod pelo nome do pod.
Se você enviar um trabalho do Spark com o comando spark-operator, use os seguintes comandos kubectl:
kubectl get pods -n example-spark-namespace
Observação: substitua example-spark-namespace pelo namespace do Spark usado para iniciar o trabalho.
kubectl logs example-pod-driver -n example-spark-namespace
Observação: substitua example-pod pelo nome do pod e example-spark-namespace pelo namespace do Spark usado para iniciar o trabalho.
Se você enviar um trabalho do Spark com o comando spark-submit, use os seguintes comandos kubectl. Para obter mais informações, consulte Submitting applications no site do Apache Spark.
kubectl get pods -n example-spark-namespace
Observação: substitua example-spark-namespace pelo namespace do Spark usado para iniciar o trabalho.
kubectl logs example-pod-driver -n example-spark-namespace
Observação: example-spark-namespace com o namespace do Spark usado para iniciar o trabalho e example-pod com o nome do pod.
Solucionar problemas de trabalhos do Spark que falharam no Amazon EMR Serverless
Quando você envia um trabalho do Spark no Amazon EMR Serverless, o registro é ativado para todas as execuções de trabalho por padrão. Além disso, você pode ativar o registro em log do Amazon S3 para seu bucket do Amazon S3. Para solucionar problemas em seu trabalho do Spark que falhou, veja os detalhes da execução do trabalho e escolha a opção Arquivos de log do driver. Além disso, você pode verificar os logs armazenados no CloudWatch para identificar a causa raiz da falha no trabalho do Spark.
Informações relacionadas
Adicionar um trabalho do Spark
Conteúdo relevante
- AWS OFICIALAtualizada há 3 anos
- AWS OFICIALAtualizada há 25 dias
- AWS OFICIALAtualizada há 3 anos
- AWS OFICIALAtualizada há 2 anos