Comment résoudre l'échec de ma tâche Amazon EMR Spark à l'aide d'Amazon Athena ?

Date de la dernière mise à jour : 11/03/2021

Ma tâche Spark sur Amazon EMR a échoué. Je veux résoudre l'échec en interrogeant les journaux Spark à l'aide d'Amazon Athena.

Résolution

Lorsque les applications Amazon EMR s'exécutent sur Amazon EMR, elles produisent des fichiers journaux. Vous pouvez créer un tableau basique pour les fichiers journaux EMR, puis utiliser Athena pour interroger ces journaux EMR. Vous pouvez identifier les événements et les tendances des applications et des clusters en interrogeant les journaux EMR.

Exécutez une commande similaire à celle présentée ci-dessous pour créer un tableau basique myemrlog à partir des fichiers journaux EMR enregistrés dans votre emplacement de journal Amazon S3 :

CREATE EXTERNAL TABLE `myemrlogs`(
  `data` string COMMENT 'from deserializer')
ROW FORMAT DELIMITED  
FIELDS TERMINATED BY '|'
LINES TERMINATED BY '\n'
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  's3://aws-logs-111122223333-us-west-2/elasticmapreduce/j-1ABCDEEXAMPLE/containers/application_1111222233334_5555/'

Remplacez ce qui suit dans la requête ci-dessus :

  • myemrlog par le nom du tableau
  • 111122223333 par le numéro de compte AWS
  • j-1ABCDEEXAMPLE par le clusterID
  • us-west-2 par votre région préférée
  • application_1111222233334_5555 par l'ID de l'application

Remarque : le compartiment S3 mentionné dans l'exemple est le compartiment par défaut utilisé par Amazon EMR. Pour vérifier le chemin de votre compartiment de journaux, ouvrez la console Amazon EMR, choisissez votre cluster, puis consultez le champ URI de connexion dans l'onglet Récapitulatif.

Ensuite, exécutez une commande similaire à la suivante pour vérifier les occurrences de FAIL, ERROR, WARN, EXCEPTION, FATAL ou CAUSE dans myemrlogs :

SELECT *,"$PATH" FROM myemrlogs WHERE regexp_like(data, 'FAIL|ERROR|WARN|EXCEPTION|FATAL|CAUSE') limit 100;

Remarque : remplacez myemrlog par le nom du tableau que vous avez créé à partir des fichiers journaux EMR.

Les journaux EMR peuvent être interrogés de différentes manières pour savoir à quelle étape l'application Spark a échoué. Voici quelques façons d'interroger les journaux pour détecter si l'application a échoué au niveau de la tâche, de l'étape, de la tâche ou de l'exécuteur.

Exécutez une commande similaire à celle-ci pour obtenir le code de sortie de l'application :

SELECT *,"$PATH" FROM myemrlogs WHERE regexp_like(data, 'exitCode');

Exécutez une commande similaire à la suivante pour vérifier sur quel hôte l'exécuteur Spark est en cours d'exécution :

SELECT *,"$PATH" FROM myemrlogs WHERE regexp_like(data, 'executor ID');

Exécutez une commande similaire à la suivante pour suivre le mappage des tâches aux étapes :

SELECT *,"$PATH" FROM myemrlogs WHERE regexp_like(data, 'TID');

Exécutez une commande similaire à la suivante pour vérifier les détails de mémoire de la pile des conteneurs :

SELECT *,"$PATH" FROM myemrlogs WHERE regexp_like(data, 'space');

Exécutez une commande similaire à la suivante pour suivre la progression de chaque tâche/étape sur le planificateur de graphique orienté acyclique (DAG, Directed Acyclic Graph) :

SELECT *,"$PATH" FROM myemrlogs WHERE regexp_like(data, 'DAGScheduler');

Vous pouvez également créer un tableau partitionné à partir des journaux Amazon EMR, puis utiliser Athena pour interroger ces journaux. Pour plus d'informations, consultez Création et interrogation d'un tableau partitionné à partir des journaux Amazon EMR.


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?