Durch die Nutzung von AWS re:Post stimmt du den AWS re:Post Nutzungsbedingungen

Wie behebe ich den Fehler „Befehl mit Exit-Code fehlgeschlagen“ in AWS Glue?

Lesedauer: 5 Minute
0

Mein AWS Glue-Job schlägt fehl und gibt den Fehler „Befehl mit Exit-Code fehlgeschlagen“ aus.

Kurze Beschreibung

„Befehl mit Exit-Code X fehlgeschlagen“ ist eine allgemeine Fehlermeldung, die zurückgegeben wird, wenn Ihre AWS Glue-Anwendung heruntergefahren wird. Dieser Fehler tritt auf, wenn eine oder mehrere der folgenden Bedingungen zutreffen:

  • Dem Treiber oder Executor im AWS Glue-Job ist nicht mehr genügend Arbeitsspeicher verfügbar.
  • Das Auftragsskript weist Probleme im Zusammenhang mit dem Code auf.
  • Der Rolle „AWS Identity and Access Management (AWS IAM)“ fehlen die erforderlichen Berechtigungen für den Zugriff auf den Skriptpfad.

Um diesen Fehler weiter zu untersuchen, überprüfen Sie die Amazon CloudWatch Logs und Metriken.

Lösung

Der AWS Glue-Spark-Job schlägt mit dem Fehler „Befehl mit Exit-Code 1 fehlgeschlagen“ fehl und in den CloudWatch-Protokollen wird der Fehler „java.lang.OutOfMemoryError: Java heap space“ angezeigt

Dieser AWS Glue-Fehler weist darauf hin, dass einem Treiber oder Executor-Prozess im Job nicht genügend Arbeitsspeicher zur Verfügung steht. Um zu überprüfen, ob ein Treiber oder Executor die OOM-Ausnahme (Out-of-Memory) verursacht, überprüfen Sie die CloudWatch-Metriken für glue.driver.jvm.heap.usage und glue.executorID.heap.usage. Weitere Informationen finden Sie unter Überwachung von AWS Glue mithilfe von Amazon CloudWatch-Metriken.

Informationen zur Behebung einer durch den Treiber verursachten OOM-Ausnahme finden Sie unter Wie löse ich den Fehler „java.lang.OutOfMemoryError: Java heap space“ in einem AWS Glue-Spark-Job? und Debuggen einer Treiber-OOM-Ausnahme.

Informationen zur Behebung einer durch Executors verursachten OOM-Ausnahme finden Sie unter Debuggen einer Executor-OOM-Ausnahme.

Executors schlagen mit „Befehl mit Exit-Code 1 fehlgeschlagen“ fehl

Dieser Fehler tritt auf, wenn Sie einen AWS Glue-Job abbrechen. Dieser Fehler tritt auch auf, wenn Sie die Executors zwangsweise herunterfahren und der Treiber beendet wird. Weitere Informationen zu dem Fehler finden Sie in den CloudWatch-Protokollen für AWS Glue.

Der Spark-Job von AWS Glue Version 0.9/1.0 schlägt mit dem Fehler „Befehl mit Exit-Code 1 fehlgeschlagen“ fehl und in den CloudWatch-Protokollen wird der Fehler „Container wurde von YARN wegen Überschreitung der Speichergrenzen gelöscht“ angezeigt

Hinweis: Für Spark-Jobs in AWS Glue Version 1.0 ist der Support abgelaufen. Führen Sie ein Upgrade auf Glue 2.0 oder höher durch, um die Leistung zu verbessern.

Dieser AWS Glue-Fehler weist darauf hin, dass der Executor eine OOM-Ausnahme verursacht. Informationen zur Behebung dieses Fehlers finden Sie unter Debuggen einer Executor-OOM-Ausnahme.

Der AWS Glue-Python Shell-Job schlägt mit dem Fehler „Befehl mit Exit-Code 1 fehlgeschlagen“ fehl

Dieser Fehler weist darauf hin, dass die AWS Glue-IAM-Rolle nicht berechtigt ist, über den Amazon S3-Pfad (Amazon Simple Storage Service) auf das AWS Glue-Skript zuzugreifen. Überprüfen Sie die Berechtigungen, die die AWS Glue-IAM-Rolle haben muss, um auf den Pfad zum Skriptspeicherort zuzugreifen. Ordnen Sie diese Berechtigungen dann der IAM-Rolle zu.

Der AWS Glue-Job schlägt mit dem Fehler „Befehl mit Exit-Code 1 fehlgeschlagen“ fehl und wird nicht gestartet

Überprüfen Sie die CloudWatch-Job-Protokolle auf Fehler, die mit Amazon S3 zusammenhängen. In den Protokollen wird möglicherweise ein Fehler ähnlich dem folgenden angezeigt:

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

Dieser Fehler tritt auf, wenn die AWS Glue-IAM-Rolle nicht berechtigt ist, vom Amazon S3-Pfad aus auf das AWS Glue-ETL-Skript zuzugreifen. Überprüfen Sie die Berechtigungen, die die AWS Glue-IAM-Rolle haben muss, um auf den Pfad zum Skriptspeicherort zuzugreifen. Ordnen Sie diese Berechtigungen dann der IAM-Rolle zu.

Der AWS Glue-Job schlägt gelegentlich mit der Meldung „Befehl mit Exit-Code 10 fehlgeschlagen“ fehl und die CloudWatch-Protokolle zeigen einen Fehler an, selbst wenn die richtigen IAM- und S3-Bucket-Berechtigungen verwendet wurden

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

Dieser AWS Glue-Fehler tritt in den Versionen 3.0 oder 4.0 von AWS Glue auf. Dieser Fehler tritt auf, wenn Sie die AWS Glue-Sicherheitskonfiguration verwenden, die S3-Bucket-Richtlinie jedoch das unverschlüsselte se:putObject verweigert.

Um dieses Problem zu beheben, führen Sie job.init() am Anfang des Skripts aus, um die AWS Glue-Sicherheitskonfiguration in Kraft zu setzen. Wenn Sie die Spark-Sitzung vor job.init () starten, werden die Eigenschaften der Spark-Sicherheitskonfiguration außer Kraft gesetzt und der Fehler tritt auf.

Siehe folgendes Beispiel:

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()

Weitere Informationen zur Sicherheitskonfiguration von AWS Glue finden Sie unter Verschlüsseln von Daten, die von Crawlern, Jobs und Entwicklungsendpunkten geschrieben wurden.

Der AWS Glue-Job schlägt mit dem Fehler „Befehl mit Exit-Code X fehlgeschlagen“ fehl und JAR-Dateien werden an den Job übergeben

Möglicherweise stellen Sie in den CloudWatch-Protokollen einen der folgenden Fehler fest:

„Ausnahme im Thread „main“ java.lang.NoSuchMethodError“

„Ausnahme im Thread „main“ java.lang.ExceptionInInitializerError“

Diese Fehler weisen auf einen JAR-Abhängigkeitskonflikt oder einen Spark-Versionskonflikt hin. Prüfen Sie die JAR-Datei und die zusätzlichen JAR-Dateien, die im Job übergeben werden, auf Konflikte. Wenn Sie mehrere JAR-Dateien weitergeben, entfernen Sie jeweils eine JAR-Datei und führen Sie den AWS Glue-Job erneut aus. Auf diese Weise können Sie die Datei isolieren, die das Problem verursacht.


Ähnliche Informationen

Überwachen von Jobs mithilfe der Apache Spark-Web-Benutzeroberfläche

Warum schlägt mein AWS Glue-ETL-Job mit der Fehlermeldung „Container wurde von YARN wegen Überschreitung der Speichergrenzen gelöscht“ fehl?

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 3 Jahren