Complete a 3 Question Survey and Earn a re:Post Badge
Help improve AWS Support Official channel in re:Post and share your experience - complete a quick three-question survey to earn a re:Post badge!
¿Cómo accedo a los registros del controlador Spark en un clúster de Amazon EMR?
Quiero acceder a los registros de controladores de Apache Spark en un clúster de Amazon EMR y solucionar problemas en una aplicación de Spark.
Solución
Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulte Solución de problemas de AWS CLI. Además, asegúrese de utilizar la versión más reciente de la AWS CLI.
En Amazon EMR, Spark se ejecuta como una aplicación YARN y admite los modos de despliegue de cliente y clúster.
Trabajos en modo de cliente
El modo de cliente es el modo de despliegue predeterminado. En el modo de cliente, el controlador Spark se ejecuta en el host donde se ejecuta el comando spark-submit. Cuando ejecuta el comando spark-submit con --deploy-mode client en el nodo principal, recibe los registros del controlador en la ventana de la terminal. Amazon EMR no archiva estos registros de forma predeterminada. Para capturar los registros, guarde el resultado del comando spark-submit en un archivo.
Ejemplo de comando:
spark-submit [--deploy-mode client] ... 1>output.log 2>error.log
Cuando utiliza un paso de Amazon EMR para enviar una aplicación de Spark, Amazon EMR archiva los registros del controlador en el archivo stderr.gz de Amazon Simple Storage Service (Amazon S3). La ruta del archivo es similar a la siguiente:
s3://aws-logs-111111111111-us-east-1/elasticmapreduce/j-35PUYZBQVIJNM/steps/s-2M809TD67U2IA/stderr.gz
Para obtener más información, consulte Ver archivos de registro archivados en Amazon S3.
Para acceder a los registros de Spark, descargue los registros de pasos en una instancia de Amazon Elastic Compute Cloud (Amazon EC2) y, a continuación, busque advertencias y errores.
Siga estos pasos:
-
Ejecute el siguiente comando sync para descargar los registros de pasos:
aws s3 sync s3://aws-logs-111111111111-us-east-1/elasticmapreduce/j-35PUYZBQVIJNM/steps/s-2M809TD67U2IA/ s-2M809TD67U2IA/
-
Ejecute el siguiente comando para abrir la carpeta de registro de pasos:
cd s-2M809TD67U2IA/
-
Ejecute el siguiente comando para descomprimir el archivo de registro:
find . -type f -exec gunzip filename\;
Nota: Sustituya filename por el nombre de su archivo.
-
Ejecute el siguiente comando par obtener el ID de la aplicación YARN en el registro del modo de clúster:
grep "Client: Application report for" * | tail -n 1
-
Ejecute el siguiente comando para buscar errores y advertencias en el registro del modo cliente:
egrep "WARN|ERROR" *
También puede usar aplicaciones como JupyterHub, Apache Livy o Apache Zeppelin como cliente para enviar una aplicación de Spark al clúster. Las aplicaciones almacenan los registros del controlador en los registros de la aplicación en la carpeta /mnt/var/log/ del nodo principal.
También puede encontrar los registros comprimidos en la ruta s3://awsexamplebucket/JOBFLOW_ID/node/MASTER_ID/applications/ de Amazon S3.
Si usa Zeppelin, puede encontrar los registros de los controladores de Spark en /mnt/var/log/zeppelin/zeppelin-interpreter-spark-##########.log.
Para Jupyter, puede encontrar los registros del controlador en los registros de Livy /mnt/var/log/livy/livy-livy-server.out.
Trabajos en modo de clúster
Al enviar la aplicación de Spark en modo de clúster, el proceso del controlador se ejecuta en el contenedor principal de la aplicación. El contenedor principal de la aplicación es el primer contenedor que se ejecuta cuando se ejecuta la aplicación de Spark. El cliente registra el informe de la aplicación YARN.
Para obtener los registros de los controladores, siga estos pasos:
-
Obtenga el ID de la aplicación de los registros del cliente.
Ejemplo de salida con el ID de aplicación application_1572839353552_0008.19/11/04 05:24:42 INFO Client: Application report for application_1572839353552_0008 (state: ACCEPTED)
-
Identifique los registros del contenedor principal de la aplicación.
Lista de ejemplo de registros de aplicaciones de 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`
Nota: El primer contenedor de la lista es siempre el contenedor principal. En la lista anterior, el contenedor principal es container_1572839353552_0008_01_000001.
-
Ejecute el siguiente comando sync para descargar los registros del contenedor principal de la aplicación a una instancia:
aws s3 sync s3://aws-logs-111111111111-us-east-1/elasticmapreduce/j-35PUYZBQVIJNM/containers/application_1572839353552_0008/ application_1572839353552_0008/
-
Ejecute el siguiente comando para abrir la carpeta de registro de la aplicación de Spark:
cd application_1572839353552_0008/
-
Ejecute el siguiente comando para descomprimir el archivo de registro:
find . -type f -exec gunzip {} \;
-
Ejecute el siguiente comando para buscar errores y advertencias en todos los registros de contenedores:
egrep -Ril "ERROR|WARN" . | xargs egrep "WARN|ERROR"
-
Ejecute el siguiente comando para obtener la dirección del nodo en el que se ejecutó el contenedor principal de la aplicación. En un clúster en ejecución, puede usar la CLI de YARN para obtener los registros del contenedor de la aplicación YARN:
yarn logs -applicationId application_1585844683621_0001 | grep 'Container: container_1585844683621_0001_01_000001'
Resultado esperado:
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 las aplicaciones de Spark que envíe en modo clúster, ejecute el siguiente comando para extraer los registros del contenedor principal de la aplicación:
yarn logs -applicationId application_1585844683621_0001 -containerId container_1585844683621_0001_01_000001 -nodeAddress ip-###-##-##-##.us-west-2.compute.internal
Nota: Sustituya applicationId por el ID de su aplicación, containerId por el ID de su contenedor y nodeAddress ip por la dirección de su nodo.
Información relacionada

Contenido relevante
- preguntada hace 2 meseslg...
- preguntada hace 4 meseslg...
- preguntada hace 2 meseslg...
- preguntada hace un meslg...
- preguntada hace 3 meseslg...
- OFICIAL DE AWSActualizada hace 2 años