LoginSignup
6
6

More than 5 years have passed since last update.

EMRのログをS3/Localから追う

Last updated at Posted at 2016-06-07

概要

諸事情でYARNやSparkのWebUIがすぐに見れない、でもEMRのStepがなんか失敗しているのでログを見たい!というときにS3から見る方法。
というかEMRのログで作られる各中身の確認

前提

  • emr-4.7
  • Spark 1.6
  • Hadoop 2.7
  • ログ出力先にS3の任意のフォルダを指定。

ログディレクトリの構成

.
├── 
└── [cluster-id]
    ├── containers
    ├── em
    ├── node
    └── steps

cluster

EMR clusterはそれぞれIDを持ちます。(例: j-2540JQ2HFN027

containers

各Hadoopアプリケーションにおいて、分散環境上に複数のコンテナが立てられます。

各アプリケーションはIDを持ちます。(例: application_10000032000_0001
各コンテナはIDを持ちます。applicationのIDにコンテナ用の通し番号が付いた文字列になります。(例: container_10000032000_0001_02_000001

物理マシン : コンテナ = 1 : N
アプリケーション : コンテナ = 1 : N

の関係です。

このコンテナの中に各コンテナ上での実行ログが残されます。

em

EMRでチェックしているクラスタのメトリクスを保持しているっぽい。
が、ちゃんと調べてない。。。

node

各物理ノードのHadoop関係のプロセスのログが出ている。

  • bootstrap-action
  • yarn/hdfs

など。

steps

EMRでStep実行をした際のjarのプロセスログが表示される。
※ここでのログはあくまで実行するときのjarのログなので、Masterノードで動くプロセスのはず。たぶん。。。

stepはIDを持つ(例: s-10BFSXA1JCMAD

Sparkのログの追い方

  1. まずEMRのコンソール画面から、あるstepの実行がFailしていることを見つけます。
  2. 該当stepの実行ログ(上記stepsフォルダか、画面上のstderrなど)を確認する。
  3. applicationの起動以前であれば、ここで何かエラになっているはず。
  4. Application自体は立ち上がっている場合、applicationのIDが見つかる。
  5. そのApplicationのIDを元に、上記containersの該当Applicationを探す。
  6. 各containerのログを漁り、問題を特定する。

という流れになります。

(※S3上にログが置かれるのは5分間隔のようで、実行して直ぐだとまだログがS3に届いていない場合があります。)

localのファイルを読む場合

まだ実行中のStepや、今すぐにlogを見たい場合はS3でなくローカルに吐かれるファイルを見る必要がある。

MasterNode

sshログイン。

  • /mnt/var/log/hadoop/
    • どうやってspark-submitされているかとかわかる。

Driver/ExecutorNode

SparkUIからDriver/ExecutorNodeのIPを探る。

sshで入った後、以下を調べる

  • /mnt/var/log/hadoop-yarn/containers/<対象のコンテナID>
    • Sparkアプリのログが吐かれる。
6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6