Amazon EMR での、Apache Spark アプリケーションのステージエラーをトラブルシューティングしたいです。
簡単な説明
Spark タスクに問題があると、ステージでエラーとなることがあります。ステージでのエラーの原因は、ハードウェアの問題、不適切な Spark 構成、またはコードの問題です。ステージでエラーが発生すると、Spark ドライバーのログに次のような例外が報告されます。
"org.apache.spark.SparkException: ステージで障害が発生し、ジョブが中止されました: ステージ YYY でタスク XXX が 4 回失敗しました。最新の失敗: ステージ YYY でタスク XXX が見つかりません (TID ZZZ, ip-xxx-xx-x-xxx.compute.internal, executor NNN): ExecutorLostFailure (実行中のタスクの 1 つが原因でエグゼキューター NNN が終了しました) (example-reason)"
解決策
--deploy-mode クライアントを使用して送信した Spark ジョブの理由コードを確認する
理由コードは、ターミナルに表示される例外に記載されています。
Amazon EMR ステップからジョブを送信した場合、理由コードは Amazon EMR コンソールの stderr ファイルに記載されています。クラスターのログ記録に指定した Amazon Simple Storage Service (Amazon S3) の場所でも、ステップの stderr ログを取得できます。たとえば、ファイルパス s3://example-log-bucket/example-cluster-id/steps/example-step-id/ にログがあります。
YARN アプリケーションログでステージのエラーを特定するには、プライマリノードで次のコマンドを実行します。
yarn logs -applicationId example-application-id | grep "Job aborted due to stage failure" -A 10
注: example-application-id は、お使いの Spark アプリケーション ID に置き換えてください。
YARN アプリケーションは、クラスターのログ記録用に指定した Amazon S3 の場所から取得できます。たとえば、ファイルパス s3//example-log-bucket/example-cluster-id/containers/example-application-id/ を使用できます。アプリケーションのプライマリコンテナにある YARN ResourceManager から YARN アプリケーションログを取得することもできます。
根本原因の解決
例外を特定したら、次の AWS ナレッジセンターの記事のいずれかを参考に問題を解決します。