Al usar AWS re:Post, aceptas las AWS re:Post Términos de uso

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

6 minutos de lectura
0

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

Descripción breve

Para solucionar problemas en los trabajos fallidos de Spark en Amazon EMR en Amazon Elastic Compute Cloud (Amazon EC2), siga estos pasos:

  • En el caso de los trabajos de Spark que se envían con --deploy-mode-client, consulte los registros de pasos para identificar la causa principal del error en el paso.
  • En el caso de los trabajos de Spark que se envían con**--deploy-mode-cluster**, compruebe primero 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 principal del error en el paso.

Para solucionar problemas en los trabajos fallidos de Spark en Amazon EMR en Amazon Elastic Kubernetes Service (Amazon EKS), identifique la causa principal del error en el trabajo de Spark. Para ello, compruebe los registros del controlador de Amazon Simple Storage Service (Amazon S3) o Amazon CloudWatch.

Para solucionar problemas en los trabajos fallidos de Spark en Amazon EMR sin servidor, identifique la causa principal del error en el trabajo de Spark. Para ello, compruebe los detalles de ejecución del trabajo en la consola de aplicaciones de Amazon EMR sin servidor y en los registros del controlador.

Resolución

Solución de problemas de los trabajos fallidos de Spark en Amazon EMR en Amazon EC2

Trabajos en modo de 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 S3.

Para identificar la causa principal de un error en un paso, descargue los registros de pasos en una instancia de Amazon EC2. A continuación, busque advertencias y errores. Siga estos pasos:

Para descomprimir el archivo de registro de pasos, ejecute el siguiente comando:

find . -type f -exec gunzip {} \;

Para identificar el ID de la aplicación YARN en el registro del modo de clúster, ejecute el siguiente comando:

grep "Client: Application report for" * | tail -n 1

El siguiente archivo de ejemplo indica un problema de memoria:

«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».

Para resolver el error anterior, ejecute el comando spark-submit para enviar un trabajo con más memoria. Para obtener más información, consulte Submitting applications en el sitio web de Apache Spark.
Ejemplo:

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 de clúster
Para identificar el ID de la aplicación asociada al paso fallido, consulte el registro de pasos stderr. Los registros de pasos se archivan en Amazon S3. A continuación, identifique los registros principales de la aplicación. Los trabajos de Spark que se ejecutan en modo de clúster se ejecutan en el registro principal de la aplicación. El registro principal de la aplicación es el primer contenedor que se ejecuta cuando se inicia un trabajo de Spark. En el siguiente ejemplo, container_1572839353552_0008_01_000001 es el primer contenedor de los registros principales de la aplicación.

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

Tras identificar los registros principales de la aplicación, descárguelos en una instancia de Amazon EC2. A continuación, busque advertencias y errores.

Para descomprimir el archivo de registro de pasos, ejecute el siguiente comando:

find . -type f -exec gunzip {} \;

Para buscar advertencias y errores en los registros de contenedores, abra los registros de contenedores que aparecen en el resultado del siguiente comando:

egrep -Ril "ERROR|WARN" . | xargs egrep "WARN|ERROR"

Si el registro de un contenedor indica un problema de memoria, ejecuta el siguiente comando spark-submit para enviar un trabajo con más memoria:

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

Solución de problemas de los trabajos fallidos de Spark en Amazon EMR en Amazon EKS

Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulte Troubleshoot AWS CLI errors. Además, asegúrese de utilizar la versión más reciente de la AWS CLI.

Cuando se envía un trabajo de Spark a Amazon EMR en Amazon EKS, los registros se pueden almacenar en Amazon S3 o CloudWatch. Asegúrese de revisar los registros del controlador para ver si hay trabajos fallidos en Spark. Además, utilice los comandos kubectl para obtener más detalles relacionados con los registros del controlador y ejecutor del trabajo de Spark en ejecución.

Nota: Los comandos de Kubectl solo funcionan para los pods activos. Cuando se detienen los pods, no puede ejecutar los comandos de kubectl.

Si envía un trabajo de Spark con el comando start-job-run, utilice los siguientes comandos kubectl:

kubectl get pods -n example-spark-namespace

**Nota:**Sustituya example-spark-namespace por el espacio de nombres de Spark que se usa para iniciar el trabajo.

kubectl logs spark-example-pod-driver -n example-spark-namespace -c spark-kubernetes-driver

**Nota:**Sustituya example-spark-namespace por el espacio de nombres de Spark que se usa para iniciar el trabajo y example-pod por el nombre del pod.

Si envía un trabajo de Spark con el comando spark-operator, utilice los siguientes comandos kubectl:

kubectl get pods -n example-spark-namespace

**Nota:**Sustituya example-spark-namespace por el espacio de nombres de Spark que se usa para iniciar el trabajo.

kubectl logs example-pod-driver -n example-spark-namespace

Nota: Sustituya example-pod por el nombre del pod y example-spark-namespace por el espacio de nombres de Spark que se usa para iniciar el trabajo.

Si envía un trabajo de Spark con el comando spark-submit, utilice los siguientes comandos kubectl. Para obtener más información, consulte Submitting applications en el sitio web de Apache Spark.

kubectl get pods -n example-spark-namespace

**Nota:**Sustituya example-spark-namespace por el espacio de nombres de Spark que se usa para iniciar el trabajo.

kubectl logs example-pod-driver -n example-spark-namespace

Nota: example-spark-namespace con el espacio de nombres de Spark que se usa para iniciar el trabajo y example-pod con el nombre del pod.

Solucionar problemas de trabajos de Spark fallidos en Amazon EMR sin servidor

Cuando envía un trabajo de Spark en Amazon EMR sin servidor, el registro está activado de forma predeterminada para todas las ejecuciones de trabajos. Además, puede activar el registro de Amazon S3 para su bucket de Amazon S3. Para solucionar el problema de un trabajo fallido en Spark, consulte los detalles de la ejecución del trabajo y, a continuación, elija la opción Archivos de registro del controlador. Además, puede comprobar los registros que están almacenados en CloudWatch para identificar la causa principal del error en el trabajo de Spark.

Información relacionada

Add a Spark step

Running jobs with Amazon EMR on EKS

Logging and monitoring

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 3 meses