Comment accéder aux journaux de pilote Spark sur un cluster Amazon EMR ?
Je souhaite accéder aux journaux de pilote Apache Spark sur un cluster Amazon EMR et dépanner une application Spark.
Résolution
Remarque : Si des erreurs surviennent lorsque vous exécutez des commandes de l'interface de la ligne de commande AWS (AWS CLI), consultez la section Résoudre des erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l'interface.
Sur Amazon EMR, Spark s'exécute en tant qu'application YARN et prend en charge les modes de déploiement client et cluster.
Tâches en mode client
Le mode client est le mode de déploiement par défaut. En mode client, le pilote Spark s'exécute sur l'hôte sur lequel s'exécute la commande spark-submit. Lorsque vous exécutez la commande spark-submit avec le client --deploy-mode client sur le nœud primaire, vous recevez les journaux de pilote dans la fenêtre du terminal. Amazon EMR n'archive pas ces journaux par défaut. Pour capturer les journaux, enregistrez le résultat de la commande spark-submit dans un fichier.
Exemple de commande :
spark-submit [--deploy-mode client] ... 1>output.log 2>error.log
Lorsque vous utilisez une étape Amazon EMR pour soumettre une application Spark, Amazon EMR archive les journaux du pilote dans le fichier stderr.gz d'Amazon Simple Storage Service (Amazon S3). Le chemin du fichier ressemble à ce qui suit :
s3://aws-logs-111111111111-us-east-1/elasticmapreduce/j-35PUYZBQVIJNM/steps/s-2M809TD67U2IA/stderr.gz
Pour plus d'informations, consultez la section Afficher les fichiers journaux archivés dans Amazon S3.
Pour accéder aux journaux du pilote Spark, téléchargez les journaux d’étapes sur une instance Amazon Elastic Compute Cloud (Amazon EC2), puis recherchez les avertissements et les erreurs.
Procédez comme suit :
-
Exécutez la commande sync suivante pour télécharger les journaux des étapes :
aws s3 sync s3://aws-logs-111111111111-us-east-1/elasticmapreduce/j-35PUYZBQVIJNM/steps/s-2M809TD67U2IA/ s-2M809TD67U2IA/ -
Exécutez la commande suivante pour ouvrir le dossier du journal d’étapes :
cd s-2M809TD67U2IA/ -
Exécutez la commande suivante pour décompresser le fichier journal :
find . -type f -exec gunzip filename\;Remarque : Remplacez filename par le nom de votre fichier.
-
Exécutez la commande suivante pour identifier l'ID d'application YARN à partir du journal en mode cluster :
grep "Client: Application report for" * | tail -n 1 -
Exécutez la commande suivante pour rechercher des erreurs et des avertissements dans le journal en mode client :
egrep "WARN|ERROR" *
Vous pouvez également utiliser des applications telles que JupyterHub, Apache Livy ou Apache Zeppelin en tant que client pour soumettre une application Spark au cluster. Les applications stockent les journaux de pilote dans les journaux de l'application situés dans le dossier /mnt/var/log/ du nœud primaire.
Vous pouvez également trouver les journaux compressés dans le chemin s3://awsexamplebucket/JOBFLOW_ID/node/MASTER_ID/applications/ d’Amazon S3.
Si vous utilisez Zeppelin, vous trouverez les journaux du pilote Spark dans /mnt/var/log/zeppelin/zeppelin-interpreter-spark-##########.log.
Pour Jupyter, vous pouvez trouver les journaux de pilote dans les journaux Livy /mnt/var/log/livy/livy-livy-server.out
Tâches en mode cluster
Lorsque vous soumettez l'application Spark en mode cluster, le processus pilote s'exécute dans le conteneur principal de l'application. L'application primaire est le premier conteneur qui s'exécute lors de l'exécution de l'application Spark. Le client enregistre le rapport d'application YARN.
Pour obtenir les journaux de pilote, procédez comme suit :
-
Obtenez l'ID de l'application à partir des journaux du client.
Exemple de sortie avec l'ID d’application application_1572839353552_000819/11/04 05:24:42 INFO Client: Application report for application_1572839353552_0008 (state: ACCEPTED) -
Identifiez les journaux du conteneur primaire d'application.
Exemple de liste de journaux d'application 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`Remarque : Le premier conteneur de la liste est toujours le conteneur primaire. Dans la liste précédente, le conteneur primaire est container_1572839353552_0008_01_000001.
-
Exécutez la commande sync suivante pour télécharger les journaux du conteneur primaire d’application sur une instance :
aws s3 sync s3://aws-logs-111111111111-us-east-1/elasticmapreduce/j-35PUYZBQVIJNM/containers/application_1572839353552_0008/ application_1572839353552_0008/ -
Exécutez la commande suivante pour ouvrir le dossier journal d’application Spark :
cd application_1572839353552_0008/ -
Exécutez la commande suivante pour décompresser le fichier journal :
find . -type f -exec gunzip {} \; -
Exécutez la commande suivante pour rechercher des erreurs et des avertissements dans tous les journaux de conteneur :
egrep -Ril "ERROR|WARN" . | xargs egrep "WARN|ERROR" -
Exécutez la commande suivante pour obtenir l'adresse du nœud sur lequel le conteneur primaire d'application s'est exécuté. Sur un cluster en cours d'exécution, vous pouvez utiliser la CLI YARN pour obtenir les journaux des conteneurs d'application YARN :
yarn logs -applicationId application_1585844683621_0001 | grep 'Container: container_1585844683621_0001_01_000001'Résultat attendu :
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 -
Pour les applications Spark que vous soumettez en mode cluster, exécutez la commande suivante pour extraire les journaux du conteneur primaire d’application :
yarn logs -applicationId application_1585844683621_0001 -containerId container_1585844683621_0001_01_000001 -nodeAddress ip-###-##-##-##.us-west-2.compute.internalRemarque : Remplacez applicationId par l'ID de votre application, containerId par l'ID de votre conteneur et nodeAddress ip par l'adresse de votre nœud.
Informations connexes
- Sujets
- Analytics
- Balises
- Amazon EMR
- Langue
- Français

Contenus pertinents
- demandé il y a un an
- demandé il y a 2 ans
- demandé il y a 3 ans
AWS OFFICIELA mis à jour il y a 8 mois
AWS OFFICIELA mis à jour il y a 2 ans