¿Cómo soluciono los errores en un paso de Spark en Amazon EMR?

4 minutos de lectura
0

Quiero solucionar los errores en un paso de Apache Spark en Amazon EMR.

Breve descripción

Para solucionar los errores de Spark, siga estos pasos:

  • En el caso de los trabajos de Spark enviados con --deploy-mode client: Consulte los registros de pasos para identificar la causa de raíz del error en el paso.
  • En el caso de los trabajos de Spark enviados con --deploy-mode cluster: Consulte los registros de pasos para identificar el ID de la aplicación. A continuación, compruebe los registros maestros de la aplicación para identificar la causa de raíz del error en el paso.

Solución

Trabajos en modo cliente

Cuando se implementa un trabajo de Spark en modo cliente, los registros de pasos proporcionan los parámetros del trabajo y los mensajes de error de los pasos. Estos registros se archivan en Amazon Simple Storage Service (Amazon S3). Por ejemplo:

  • s3://aws-logs-111111111111-us-east-1/elasticmapreduce/j-35PUYZBQVIJNM/steps/s-2M809TD67U2IA/controller.gz: Este archivo contiene el comando spark-submit. Consulte este registro para ver los parámetros del trabajo.
  • s3://aws-logs-111111111111-us-east-1/elasticmapreduce/j-35PUYZBQVIJNM/steps/s-2M809TD67U2IA/stderr.gz: Este archivo proporciona los registros del controlador. (Cuando el trabajo de Spark se ejecuta en modo cliente, el controlador de Spark se ejecuta en el nodo maestro.)

Con el fin de encontrar la causa de raíz del error en el paso, ejecute los siguientes comandos para descargar los registros de pasos en una instancia de Amazon Elastic Compute Cloud (Amazon EC2). A continuación, busque advertencias y errores:

#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 ejemplo, este archivo:

s3://aws-logs-111111111111-us-east-1/elasticmapreduce/j-35PUYZBQVIJNM/containers/application_1572839353552_0008/container_1572839353552_0008_01_000001/stderr.gz

indica un problema de memoria:

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.

Utilice la información de los registros para solucionar el error.

Por ejemplo, para solucionar el problema de memoria, envíe un trabajo con más memoria de ejecutor:

spark-submit --deploy-mode client --executor-memory 4g --class org.apache.spark.examples.SparkPi /usr/lib/spark/examples/jars/spark-examples.jar

Trabajos en modo clúster

1.    Consulte el registro de pasos stderr para identificar el ID de la aplicación asociada al paso fallido. Los registros de pasos se archivan en Amazon S3. Por ejemplo, este registro:

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 los registros maestros de la aplicación. Cuando el trabajo de Spark se ejecuta en modo clúster, el controlador de Spark se ejecuta dentro de la aplicación maestra. El maestro de la aplicación es el primer contenedor que se ejecuta cuando se ejecuta el trabajo de Spark. A continuación se muestra una lista de ejemplo de registros de aplicaciones de Spark.

En la lista, container_1572839353552_0008_01_000001 es el primer contenedor, lo que significa que se trata del maestro de la aplicación.

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.    Tras identificar los registros maestros de la aplicación, descárguelos en una instancia de Amazon EC2. A continuación, busque advertencias y errores. Por ejemplo:

#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 ejemplo, este registro:

s3://aws-logs-111111111111-us-east-1/elasticmapreduce/j-35PUYZBQVIJNM/containers/application_1572839353552_0008/container_1572839353552_0008_01_000001/stderr.gz

indica un problema de memoria:

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.    Solucione el problema identificado en los registros. Por ejemplo, para corregir el problema de memoria, envíe un trabajo con más memoria de ejecutor:

spark-submit --deploy-mode cluster --executor-memory 4g --class org.apache.spark.examples.SparkPi /usr/lib/spark/examples/jars/spark-examples.jar 1000

Información relacionada

Adición de un paso de Spark

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 3 años