Comment résoudre l’erreur « La commande a échoué avec un code de sortie » dans AWS Glue ?

Lecture de 5 minute(s)
0

Ma tâche AWS Glue échoue et renvoie l’erreur « La commande a échoué avec un code de sortie ».

Brève description

Lorsque votre application est à l’arrêt, le message d’erreur générique qui renvoyé est :« La commande a échoué avec le code de sortie X ». Cette erreur se produit lorsqu’une ou plusieurs des conditions suivantes sont remplies :

  • Le pilote ou l’exécuteur dans la tâche AWS Glue est à court de mémoire.
  • Le script de travail présente des problèmes liés au code.
  • Le rôle Gestion des identités et des accès AWS (AWS IAM) ne dispose pas des autorisations requises pour accéder au chemin du script.

Pour approfondir l’examen de cette erreur, consultez Amazon CloudWatch logs et les métriques.

Résolution

L’échec de la tâche AWS Glue Spark affiche : « La commande a échoué avec le code de sortie 1 » et les journaux CloudWatch affichent l’erreur « java.lang.OutOfMemoryError: Espace de stockage Java »

Cette erreur AWS Glue indique qu’un pilote ou processus d’exécution de la tâche manque de mémoire. Pour vérifier si un pilote ou un exécuteur est à l’origine de l’exception de mémoire insuffisante (OOM), consultez les métriques CloudWatch pour glue.driver.jvm.heap.usage et glue.executorID.heap.usage. Pour en savoir plus, consultez Surveillance d’AWS Glue à l’aide des métriques Amazon CloudWatch.

Pour résoudre une exception OOM causée par le pilote, consultez Comment puis-je résoudre l’erreur « java.lang.OutOfMemoryError : Espace de stockage Java » dans une tâche AWS Glue Spark ? et Débogage d’une exception OOM de pilote.

Pour résoudre une exception OOM provoquée par des exécuteurs, consultez Débogage d’une exception OOM d’exécuteur.

Le message : « La commande a échoué avec le code de sortie 1 » indique l’échec des exécuteurs

Cette erreur se produit lorsque vous annulez une tâche AWS Glue. Cette erreur survient également lorsque vous arrêtez de force les exécuteurs et que le pilote est interrompu. Consultez les journaux CloudWatch de AWS Glue pour obtenir plus de détails sur l’erreur.

L’échec de la tâche Spark d’AWS Glue version 0.9/1.0 affiche l’erreur « La commande a échoué avec le code de sortie 1 » et les journaux CloudWatch affichent l’erreur « Le conteneur a été arrêté par YARN pour dépassement des limites de mémoire »

**Remarque ** : Les tâches Spark d’AWS Glue version 1.0 ont atteint la fin de l’assistance. Passez à Glue 2.0 ou une version ultérieure pour de meilleures performances.

Cette erreur AWS Glue indique que l’exécuteur est à l’origine d’une exception OOM. Pour résoudre cette erreur, consultez Débogage d’une exception OOM d’exécuteur.

La tâche AWS Glue Python Shell échoue avec l’erreur « La commande a échoué avec le code de sortie 1 »

Cette erreur indique que le rôle IAM AWS Glue n’est pas autorisé à accéder au script AWS Glue à partir du chemin Amazon Simple Storage Service (Amazon S3). Vérifiez les autorisations dont le rôle IAM AWS Glue doit disposer pour accéder à l’emplacement du script.Attribuez ensuite ces autorisations au rôle IAM.

La tâche AWS Glue échoue avec l’erreur « La commande a échoué avec le code de sortie 1 » et ne démarre pas

Consultez les journaux des tâches CloudWatch pour identifier les erreurs liées à Amazon S3. Dans les journaux, vous pouvez recevoir une erreur semblable à la suivante :

com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied' Request ID: xxxxxxxxxxxxx)

Cette erreur se produit lorsque le rôle IAM AWS Glue n’est pas autorisé à accéder au script AWS Glue ETL à partir du chemin Amazon S3. Vérifiez les autorisations dont le rôle IAM AWS Glue doit disposer pour accéder à l’emplacement du script. Attribuez ensuite ces autorisations au rôle IAM.

Parfois le message d’échec de la tâche AWS Glue indique « La commande a échoué avec le code de sortie 10 » et que les journaux CloudWatch affichent une erreur, même si les autorisations de compartiment IAM et S3 sont correctes

com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied' Request ID: xxxxxxxxxxxxx)

Cette erreur AWS Glue se produit sur les versions 3.0 ou 4.0 d’AWS Glue. Cette erreur survient lorsque vous utilisez la configuration de sécurité d’AWS Glue, tandis que la stratégie du compartiment S3 refuse le paramètre se:putObject non chiffré.

Pour résoudre ce problème, exécutez la commande job.init() au début du script pour appliquer la configuration de sécurité d’AWS Glue. Si vous démarrez la session Spark avant job.init(), les propriétés de configuration de sécurité de Spark seront remplacées et l’erreur se produira.

Consultez l’exemple suivant :

job = Job(glueContext)
job.init(args["JOB_NAME"], args)

#Use one of the following depending on whether Spark configuration is being set or not
spark = glueContext.spark_session
spark = glueContext.spark_session.builder.enableHiveSupport().config("hive.exec.dynamic.partition","true").config("hive.exec.dynamic.partition.mode", "nonstrict").getOrCreate()

Pour en savoir plus sur la configuration de sécurité d’AWS Glue, consultez Chiffrement des données écrites par les crawlers d’exploration, les tâches et les points de terminaison de développement.

La tâche AWS Glue échoue avec l’erreur « La commande a échoué avec le code de sortie X » et les fichiers JAR sont transmis à la tâche

Vous pouvez observer l’une des erreurs suivantes dans les journaux CloudWatch :

« Exception dans le thread java.lang.NoSuchMethodError ‘‘main’’ »

« Exception dans le thread java.lang.ExceptionInInitializerError ‘‘main’’ »

Ces erreurs indiquent un conflit de dépendance JAR ou un conflit de version de Spark. Vérifiez que le fichier exécutable JAR et les fichiers JAR supplémentaires transmis dans la tâche n’entrent pas en conflit. Si vous souhaitez transmettre plusieurs fichiers JAR, sélectionnez un seul fichier JAR chaque fois et relancez la tâche AWS Glue. Cette méthode permet d’isoler le fichier à l’origine du problème.


Informations connexes

Surveillance des tâches à l’aide de l’interface utilisateur Web d’Apache Spark

Pourquoi l’échec de ma tâche AWS Glue ETL affiche-t-il l’erreur « Conteneur arrêté par YARN pour dépassement des limites de mémoire » ?

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