AWS Glue の「コマンドが終了コードで失敗しました」エラーをトラブルシューティングするにはどうすればよいですか?

最終更新日: 2021 年 8 月 24 日

AWS Glue の抽出、変換、ロード (ETL) ジョブが「コマンドが終了コードで失敗しました」というエラーで失敗します。

簡単な説明

このエラーは、次の条件の 1 つまたは複数に当てはまる場合に発生します。

  • ジョブ内のドライバーまたはエグゼキューターのメモリが不足している。
  • ETL スクリプトにコード関連の問題がある。
  • AWS Glue IAM ロールには、スクリプトパスへのアクセスに必要なアクセス許可がない。

上記のいずれかの理由でジョブの実行が失敗すると、それぞれのエラーログが Amazon CloudWatch に書き込まれます。

解決方法

ユースケースに基づいて、適切なトラブルシューティング手順を実行します。

ジョブが「終了コード 1 でのコマンドが失敗しました」というエラーで失敗し、CloudWatch Logs に「java.lang.OutOfMemoryError: Java heap space」エラーが表示されます。

「java.lang.OutOfMemoryError: Java heap space」エラーは、ジョブのドライバープロセスでメモリが不足していることを示します。メモリ不足 (OOM) 例外がドライバーまたはエグゼキューターによるものかどうかを調べるには、「 OOM 例外とジョブの異常のデバッグ」を参照してください。ドライバーによって引き起こされる OOM 例外をデバッグするには、「 AWS Glue の「java.lang.OutOfMemoryError: Java heap space」エラーを解決するにはどうすれば良いですか?」を参照してください。 詳細については、「 ドライバー 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 ログに「Exception in thread "main" java.lang.NoSuchMethodError」または「Exception in thread "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 構文エラーを確認します。

注: このエラーは、ネットワークの問題など、さまざまな理由で発生する可能性があります。したがって、解決手順は記事に記載されている手順に限定されません。