¿Cómo puedo acceder a los registros del controlador Spark en un clúster de Amazon EMR?

5 minutos de lectura
0

Quiero solucionar problemas con una aplicación de Apache Spark. ¿Cómo accedo a los registros del controlador Spark en un clúster de Amazon EMR?

Descripción breve

En Amazon EMR, Spark se ejecuta como una aplicación YARN y admite dos modos de despliegue:

  • Modo de cliente: Este 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.
  • Modo de clúster: El controlador Spark se ejecuta en el maestro de aplicaciones. El maestro de aplicaciones es el primer contenedor que se ejecuta cuando se ejecuta el trabajo de Spark.

Resolución

Trabajos en modo de cliente

Al enviar una aplicación Spark ejecutando spark-submit con --deploy-mode client en el nodo maestro, los registros del controlador se muestran en la ventana del 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:

$ spark-submit [--deploy-mode client] ... 1>output.log 2>error.log

Al enviar una aplicación Spark mediante un paso de Amazon EMR, los registros del controlador se guardan 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.

Descargue los registros de pasos en una instancia de Amazon Elastic Compute Cloud (Amazon EC2) y, a continuación, busque advertencias y errores:

  1. Descargue los registros de pasos:
aws s3 sync s3://aws-logs-111111111111-us-east-1/elasticmapreduce/j-35PUYZBQVIJNM/steps/s-2M809TD67U2IA/ s-2M809TD67U2IA/
  1. Abra la carpeta de registro de pasos:
cd s-2M809TD67U2IA/
  1. Descomprima el archivo de registro:
find . -type f -exec gunzip {} \;
  1. Obtenga el ID de la aplicación YARN del registro del modo de clúster:
grep "Client: Application report for" * | tail -n 1
  1. Busque errores y advertencias en el registro del modo de cliente:
egrep "WARN|ERROR" *

También es posible enviar una solicitud de Spark mediante una aplicación como JupyterHub, Apache Livy o Apache Zeppelin. Estas aplicaciones se convierten en el cliente que envía la aplicación Spark al clúster. En este escenario, los registros del controlador se almacenan en los registros de la aplicación correspondiente, en la carpeta /mnt/var/log/ del nodo maestro. También puede encontrar los registros comprimidos en la siguiente ruta de Amazon S3:

s3://awsexamplebucket/JOBFLOW_ID/node/MASTER_ID/applications/

Por ejemplo, si usa Zeppelin, puede encontrar los registros del controlador Spark en /mnt/var/log/zeppelin/zeppelin-interpreter-spark-xxxxxxxxxx.log.

Nota: Para Jupyter, los registros del controlador se almacenan en los registros de Livy: /mnt/var/log/livy/livy-livy-server.out.

Para obtener más información sobre el acceso a los registros específicos de la aplicación, consulte Ver los archivos de registro archivados en Amazon S3.

Trabajos en modo de clúster

Al enviar la aplicación Spark en modo de clúster, el proceso del controlador se ejecuta en el contenedor maestro de la aplicación. El maestro de aplicaciones es el primer contenedor que se ejecuta cuando se ejecuta la aplicación Spark. El cliente registra el informe de la aplicación YARN. Para obtener los registros del controlador:

  1. Obtenga el ID de la aplicación de los registros del cliente. En el siguiente ejemplo, application_1572839353552_0008 es el ID de la aplicación.
19/11/04 05:24:42 INFO Client: Application report for application_1572839353552_0008 (state: ACCEPTED)
  1. Identifique los registros del contenedor maestro de la aplicación. La siguiente es una lista de ejemplos de registros de aplicaciones Spark. En esta lista, el container_1572839353552_0008_01_000001 es el primer contenedor, lo que significa que es el contenedor 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

  1. Descargue los registros del contenedor maestro de la aplicación a una instancia de EC2:
aws s3 sync s3://aws-logs-111111111111-us-east-1/elasticmapreduce/j-35PUYZBQVIJNM/containers/application_1572839353552_0008/ application_1572839353552_0008/
  1. Abra la carpeta de registro de la aplicación Spark:
cd application_1572839353552_0008/
  1. Descomprima el archivo de registro:
find . -type f -exec gunzip {} \;
  1. Busque errores y advertencias en todos los registros de contenedores:
egrep -Ril "ERROR|WARN" . | xargs egrep "WARN|ERROR"
  1. Abra los registros del contenedor que se devuelven en la salida del comando anterior.

En un clúster en ejecución, puede usar la CLI de YARN para obtener los registros del contenedor de la aplicación YARN. En el caso de una aplicación Spark enviada en modo clúster, puede acceder a los registros del controlador Spark extrayendo los registros del contenedor maestro de la aplicación de la siguiente manera:

# 1. Get the address of the node that the application master container ran on
$ yarn logs -applicationId application_1585844683621_0001 | grep  'Container: container_1585844683621_0001_01_000001'

20/04/02 19:15:09 INFO client.RMProxy: Connecting to ResourceManager at ip-xxx-xx-xx-xx.us-west-2.compute.internal/xxx.xx.xx.xx:8032
Container: container_1585844683621_0001_01_000001 on ip-xxx-xx-xx-xx.us-west-2.compute.internal_8041

# 2. Use the node address to pull the container logs
$ yarn logs -applicationId application_1585844683621_0001 -containerId container_1585844683621_0001_01_000001 -nodeAddress ip-xxx-xx-xx-xx.us-west-2.compute.internal

Información relacionada

Solucionar problemas de un clúster

Configurar Spark

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 2 años