Como soluciono problemas de uma etapa do Spark com falha no Amazon EMR?
Quero solucionar uma falha na etapa do Apache Spark no Amazon EMR.
Descrição breve
Para solucionar falhas nas etapas do Spark:
- Para trabalhos Spark enviados com --deploy-mode client: verifique os logs da etapa para identificar a causa raiz da falha da etapa.
- Para trabalhos Spark enviados com --deploy-mode cluster: Verifique os logs das 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.
Resolução
Trabalhos no modo de cliente
Quando um trabalho Spark é implantado no modo de cliente, os logs de etapas fornecem os parâmetros da tarefa e as mensagens de erro da etapa. Esses logs são arquivados no Amazon Simple Storage Service (Amazon S3). Por exemplo:
- s3://aws-logs-111111111111-us-east-1/elasticmapreduce/j-35PUYZBQVIJNM/steps/s-2M809TD67U2IA/controller.gz: Esse arquivo contém o comando spark-submit. Verifique esse log para ver os parâmetros do trabalho.
- s3://aws-logs-111111111111-us-east-1/elasticmapreduce/j-35PUYZBQVIJNM/steps/s-2M809TD67U2IA/stderr.gz: Esse arquivo fornece os logs do driver. (Quando o trabalho Spark é executado no modo de cliente, o driver do Spark é executado no nó principal.)
Para encontrar a causa raiz da falha da etapa, execute os seguintes comandos para baixar os logs da etapa em uma instância do Amazon Elastic Compute Cloud (Amazon EC2). Em seguida, procure avisos e erros:
#Download the step logs: aws s3 sync s3://aws-logs-111111111111-us-east-1/elasticmapreduce/j-35PUYZBQVIJNM/steps/s-2M809TD67U2IA/ s-2M809TD67U2IA/ #Open the step log folder: cd s-2M809TD67U2IA/ #Uncompress the log file: find . -type f -exec gunzip {} \; #Get the yarn application id from the cluster mode log: grep "Client: Application report for" * | tail -n 1 #Get the errors and warnings from the client mode log: egrep "WARN|ERROR" *
Por exemplo, este arquivo:
s3://aws-logs-111111111111-us-east-1/elasticmapreduce/j-35PUYZBQVIJNM/containers/application_1572839353552_0008/container_1572839353552_0008_01_000001/stderr.gz
indica um problema de memória:
19/11/04 05:24:45 ERROR 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.
Use as informações nos logs para resolver o erro.
Por exemplo, para resolver o problema de memória, envie um trabalho com mais memória de executor:
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
1. Verifique o log da etapa stderr para identificar o ID da aplicação associada à etapa que falhou. Os logs das etapas são arquivados no Amazon S3. Por exemplo, este log:
s3://aws-logs-111111111111-us-east-1/elasticmapreduce/j-35PUYZBQVIJNM/steps/s-2M809TD67U2IA/stderr.gz
identifica application_1572839353552_0008:
19/11/04 05:24:42 INFO Client: Application report for application_1572839353552_0008 (state: ACCEPTED)
2. Identifique os logs principais da aplicação. Quando o trabalho Spark é executado no modo de cluster, o driver do Spark é executado na aplicação principal. A aplicação principal é o primeiro contêiner executado quando o trabalho Spark é executado. Veja a seguir um exemplo de lista de logs do aplicação Spark.
Nessa lista, container_1572839353552_0008_01_000001 é o primeiro contêiner, o que significa que é a aplicação principal.
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
3. Depois de identificar os logs da aplicação principal, baixe-os em uma instância do Amazon EC2. Em seguida, procure avisos e erros. Por exemplo:
#Download the Spark application logs: aws s3 sync s3://aws-logs-111111111111-us-east-1/elasticmapreduce/j-35PUYZBQVIJNM/containers/application_1572839353552_0008/ application_1572839353552_0008/ #Open the Spark application log folder: cd application_1572839353552_0008/ #Uncompress the log file: find . -type f -exec gunzip {} \; #Search for warning and errors inside all the container logs. Then, open the container logs returned in the output of this command. egrep -Ril "ERROR|WARN" . | xargs egrep "WARN|ERROR"
Por exemplo, este log:
s3://aws-logs-111111111111-us-east-1/elasticmapreduce/j-35PUYZBQVIJNM/containers/application_1572839353552_0008/container_1572839353552_0008_01_000001/stderr.gz
indica um problema de memória:
19/11/04 05:24:45 ERROR 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.
4. Resolva o problema identificado nos logs. Por exemplo, para corrigir o problema de memória, envie um trabalho com mais memória de executor:
spark-submit --deploy-mode cluster --executor-memory 4g --class org.apache.spark.examples.SparkPi /usr/lib/spark/examples/jars/spark-examples.jar 1000
Informações relacionadas
Conteúdo relevante
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há um ano
- AWS OFICIALAtualizada há um ano
- AWS OFICIALAtualizada há um ano