Amazon EMR で Spark ジョブが失敗しました。Amazon Athena を使用して Spark ログを照会して、失敗のトラブルシューティングを行います。
解決方法
Amazon EMR アプリケーションを Amazon EMR で実行すると、ログファイルが生成されます。EMR ログファイルの基本テーブルを作成し、Athena を使用してこれらの EMR ログを照会することができます。EMR ログを照会することで、アプリケーションとクラスターのイベントや傾向を特定できます。
次のようなコマンドを実行し、Amazon S3 ログの場所に保存された EMR ログファイルに基づいて、基本テーブル myemrlogs を作成します。
CREATE EXTERNAL TABLE `myemrlogs`(
`data` string COMMENT 'from deserializer')
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '|'
LINES TERMINATED BY '\n'
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
's3://aws-logs-111122223333-us-west-2/elasticmapreduce/j-1ABCDEEXAMPLE/containers/application_1111222233334_5555/'
上記の照会では、以下を置き換えます。
- myemrlogs をテーブルの名前に
- 111122223333 を AWS アカウント番号に
- j-1ABCDEEXAMPLE をクラスター ID に
- us-west-2 を希望するリージョンに
- application_1111222233334_5555 をアプリケーション ID に
注意: 例に示されている S3 バケットは、Amazon EMR で使用されるデフォルトのバケットです。ログバケットのパスを確認するには、Amazon EMR コンソールを開き、クラスターを選択してから、[Summary] タブの [Log URI] フィールドにチェックを入れます。
次に、次のようなコマンドを実行して、myemrlogs で FAIL、ERROR、WARN、EXCEPTION、FATAL、CAUSE が発生しているか確認します。
SELECT *,"$PATH" FROM myemrlogs WHERE regexp_like(data, 'FAIL|ERROR|WARN|EXCEPTION|FATAL|CAUSE') limit 100;
注意: myemrlogs を EMR ログファイルから作成したテーブルの名前に置き換えます。
EMR ログをさまざまな方法で照会して、Spark アプリケーションがどのステップで失敗したかを知ることができます。ここでは、ログを照会して、アプリケーションがジョブ、ステージ、タスク、またはエグゼキュータのレベルで失敗した場合のトラブルシューティングを行う方法をいくつか紹介します。
次のようなコマンドを実行して、アプリケーションの終了コードを取得します。
SELECT *,"$PATH" FROM myemrlogs WHERE regexp_like(data, 'exitCode');
次のようなコマンドを実行して、Spark エグゼキュータが実行されているホストを確認します。
SELECT *,"$PATH" FROM myemrlogs WHERE regexp_like(data, 'executor ID');
次のようなコマンドを実行して、タスクからステージへのマッピングを追跡します。
SELECT *,"$PATH" FROM myemrlogs WHERE regexp_like(data, 'TID');
次のようなコマンドを実行して、コンテナのヒープメモリの詳細を確認します。
SELECT *,"$PATH" FROM myemrlogs WHERE regexp_like(data, 'space');
次のようなコマンドを実行して、Directed Acyclic Graph (DAG) スケジューラで各ジョブ/ステージの進行状況を追跡します。
SELECT *,"$PATH" FROM myemrlogs WHERE regexp_like(data, 'DAGScheduler');
Amazon EMR ログに基づいてパーティションテーブルを作成し、Athena を使用してこれらのログを照会することもできます。詳細については、Amazon EMR ログに基づくパーティションテーブルの作成と照会を参照してください。
関連情報
Amazon EMR で Spark ジョブのステージ失敗をトラブルシューティングするにはどうすればよいですか?