Comment accéder aux journaux de pilotes Spark dans un cluster Amazon EMR ?

Lecture de 4 minute(s)
0

Je souhaite résoudre des problèmes relatifs à une application Apache Spark. Comment accéder aux journaux de pilotes Spark dans un cluster Amazon EMR ?

Brève description

Sur Amazon EMR, Spark s'exécute en tant qu'application YARN et prend en charge deux modes de déploiement :

  • Mode client : le mode de déploiement par défaut. En mode client, le pilote Spark s'exécute sur l'hôte sur lequel la commande spark-submit est exécutée.
  • Mode cluster : le pilote Spark s'exécute dans le principal de l'application. Le principal de l'application est le premier conteneur qui s'exécute lorsque la tâche Spark s'exécute.

Résolution

Tâches en mode client

Lorsque vous soumettez une application Spark en exécutant spark-submit avec le client --deploy-mode sur le nœud principal, les journaux de pilotes sont affichés dans la fenêtre du terminal. Amazon EMR n'archive pas ces journaux par défaut. Afin de capturer les journaux, enregistrez la sortie de la commande spark-submit sur un fichier. Exemple :

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

Lorsque vous soumettez une application Spark à l'aide d'une étape Amazon EMR, les journaux de pilotes sont archivés sur le fichier stderr.gz sur Amazon Simple Storage Service (Amazon S3). Le chemin d’accès au fichier est similaire à ce qui suit :

s3://aws-logs-111111111111-us-east-1/elasticmapreduce/j-35PUYZBQVIJNM/steps/s-2M809TD67U2IA/stderr.gz

Pour plus d'informations, consultez Afficher les fichiers journaux archivés dans Amazon S3.

Téléchargez les journaux d'étape sur une instance Amazon Elastic Compute Cloud (Amazon EC2), puis recherchez les avertissements et les erreurs :

1.    Téléchargez les journaux d'étape :

aws s3 sync s3://aws-logs-111111111111-us-east-1/elasticmapreduce/j-35PUYZBQVIJNM/steps/s-2M809TD67U2IA/ s-2M809TD67U2IA/

2.    Ouvrez le dossier du journal d'étape :

cd s-2M809TD67U2IA/

3.    Décompressez le fichier de journal :

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

4.    Obtenez l'ID d'application YARN du journal en mode cluster :

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

5.    Trouvez des erreurs et des avertissements dans le journal en mode client :

egrep "WARN|ERROR" *

Il est également possible de soumettre une application Spark à l'aide d'une application telle que JupyterHub, Apache Livy ou Apache Zeppelin. Ces applications deviennent le client qui soumet l'application Spark au cluster. Dans ce scénario, les journaux de pilotes sont stockés dans les journaux de l'application correspondante, dans le dossier /mnt/var/log/ sur le nœud maître. Vous pouvez également trouver les journaux compressés sur le chemin d’accès Amazon S3 suivant :

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

Par exemple, si vous utilisez Zeppelin, vous pouvez trouver les journaux de pilotes Spark dans /mnt/var/log/zeppelin/zeppelin-interpreter-spark-xxxxxxxxxx.log.

Remarque : pour Jupyter, les journaux de pilotes sont stockés dans les journaux Livy : /mnt/var/log/livy/livy-livy-server.out.

Pour plus d'informations sur l'accès aux journaux spécifiques à l'application, consultez Afficher les fichiers journaux archivés dans Amazon S3.

Tâches en mode cluster

Lorsque vous soumettez l'application Spark en mode cluster, le processus pilote s'exécute dans le container principal de l'application. Le principal de l'application est le premier container qui s'exécute lorsque l'application Spark s'exécute. Le client journalise le rapport d'application YARN. Pour obtenir les journaux de pilotes :

1.    Obtenez l'ID d'application des journaux client. Dans l'exemple suivant, application_1572839353552_0008 est l'ID d'application.

19/11/04 05:24:42 INFO Client: Application report for application_1572839353552_0008 (state: ACCEPTED)

2.    Identifiez les journaux de container d'application maître. Ce qui suit est un exemple de liste des journaux d'application Spark. Dans cette liste, container_1572839353552_0008_01_000001 est le premier container, ce qui signifie qu'il est le container d'application maître.

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.    Téléchargez les journaux de container d'application maître vers l'instance EC2 :

aws s3 sync s3://aws-logs-111111111111-us-east-1/elasticmapreduce/j-35PUYZBQVIJNM/containers/application_1572839353552_0008/ application_1572839353552_0008/

4.    Ouvrez le dossier du journal de l'application Spark :

cd application_1572839353552_0008/

5.    Décompressez le fichier de journal :

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

6.    Vérifiez tous les journaux de container à la recherche d'erreurs et d'avertissements :

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

7.    Ouvrez les journaux de container renvoyés dans la sortie de la commande précédente.

Sur un cluster en cours d'exécution, vous pouvez utiliser l'interface de ligne de commande YARN pour obtenir les journaux de container d'application. Pour une application Spark soumise en mode cluster, vous pouvez accéder aux journaux de pilotes Spark en récupérant les journaux de container principal de l'application comme ceci :

# 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

Informations connexes

Résoudre les problèmes d'un cluster

Configurer Spark

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 2 ans