如何對 AWS Glue 中的「命令失敗,隨附結束代碼」錯誤進行故障診斷?

上次更新日期︰2021 年 8 月 24 日

AWS Glue 擷取、轉換和載入 (ETL) 任務失敗,並顯示錯誤「命令失敗,隨附結束代碼」。

簡短描述

在下列一個或多個條件成立時,您會收到此錯誤:

  • 任務中的驅動程式或執行程式已用盡記憶體。
  • 您的 ETL 指令碼有程式碼相關問題。
  • AWS Glue IAM 角色缺少存取指令碼路徑所需的許可。

當您的任務執行因上述其中一個原因而失敗時,相應的錯誤日誌會寫入 Amazon CloudWatch。

解決方案

根據您的使用案例,使用適當的疑難排解步驟。

任務失敗,並顯示錯誤「命令失敗,隨附結束代碼 1」,且 CloudWatch 日誌顯示錯誤「java.lang.OutOfMemoryError:Java 堆積空間」

「java.lang.OutOfMemoryError:Java 堆積空間」錯誤表示任務中驅動程式程序的記憶體不足。若要了解記憶體不足 (OOM) 例外狀況是否由驅動程式或執行程式導致,請參閱 對 OOM 例外狀況和任務異常偵錯。如需對驅動程式導致的 OOM 例外狀況偵錯,請參閱 如何解決 AWS Glue 中的「java.lang.OutOfMemoryError:Java 堆積空間」錯誤? 如需詳細資訊,請參閱 對驅動程式 OOM 例外狀況偵錯

AWS Glue 任務失敗,並顯示錯誤「命令失敗,隨附結束代碼 1」,且 CloudWatch 日誌顯示錯誤「超過記憶體限制導致 YARN 結束容器」

此錯誤表示執行程式會導致 OOM 例外狀況。若要對執行程式導致的 OOM 例外狀況偵錯,請參閱對執行程式 OOM 例外狀況偵錯

AWS Glue 任務失敗,並顯示錯誤「命令失敗,隨附結束代碼 10」

檢查 CloudWatch 日誌中的任務,以尋找執行程式相關錯誤。該錯誤通常發生在 Spark 的隨機階段。例如,在呼叫重新分割動作,且隨機執行程式耗盡記憶體時,就會發生錯誤。在資料隨機操作期間,監控執行程式是否有落後者任務。如需詳細資訊,請參閱對高要求階段和落後者任務偵錯

AWS Glue 任務失敗,並顯示錯誤「命令失敗,隨附結束代碼 1」,且無法啟動

請檢查 CloudWatch 任務日誌,了解 Amazon Simple Storage Service (Amazon S3) 相關錯誤。錯誤日誌看起來可能類似下列內容:

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

當 AWS Glue IAM 角色沒有從 Amazon S3 路徑存取 AWS Glue ETL 指令碼所需的許可時,就會發生此錯誤。檢閱 AWS Glue IAM 角色所需的許可,以存取指令碼位置路徑。請確定這些必要的許可已連接至角色。

AWS Glue 任務失敗,並顯示錯誤「命令失敗,隨附退出代碼 1」,且 CloudWatch 日誌顯示錯誤「執行緒 "main" java.lang.NoSuchMethodError 中存在例外狀況」或「執行緒 "main” java.lang.ExceptionInInitializerError 中存在例外狀況」

這些例外狀況表示 JAR 依賴於衝突或 Spark 版本衝突。檢查 JAR 可執行檔及/或在任務中傳遞的額外 JAR 檔案是否有衝突。

AWS Glue 任務失敗,並顯示「命令失敗,隨附結束代碼 1」,且 CloudWatch 日誌顯示 "RuntimeError" 錯誤

錯誤 "RuntimeError" 表示在 ETL 指令碼中傳遞的 Spark SQL 具有語義例外狀況。

例如:

RuntimeError: FAILED: SemanticException [Error 10006]: Partition not found

若要對此錯誤進行疑難排解,請檢閱 AWS Glue 任務日誌中的 SQL 語法錯誤。

注意:此錯誤可能因不同原因而發生,例如網路問題。因此,解決步驟並不限於本文所提供的步驟。