Spark
ClouderaManager
CDH

Sparkジョブの履歴をSpark History Serverに取り込む

More than 1 year has passed since last update.

目的

Apache SparkのWebUIはアプリケーションのデバッグにとても役立ちます。

デバッグのため、このWeb UIを使って本番環境で取得したログを検証環境で確認したいことがあります。
取得したイベントのログをSparkのHistory Serverに渡すことで、本番環境のイベントログを手元の環境で見ることができて便利です。(Thanks! @kmizumar)
今回はCDH5.7の環境で検証しました。

(2016/7/20 Clouderaのライセンスによりログが取得できないため一部記載を変更)

環境

  • Spark 1.6
  • CDH5.7
  • Cloudera Manager 5.7

HueからHive on Sparkでクエリを実行

今回Sparkを実行したのはCloudera Manager5.7で構築したYARNの環境です。HiveをSpark上で実行するために、HueのHiveクエリエディタからクエリの実行前に以下のオプションを指定します。

set hive.execution.engine=spark

sparkhistory0.png

Sparkのイベントログを収集 (Cloudera Enterprise ライセンスがある場合)

Cloudera Enteprise ライセンスがある場合、Cloudera ManagerのUIからイベントログを収集できます。(ライセンスがない場合はイベントログを直接コピーします。手順は後述)

Cloudera ManagerでYARNのアプリケーションを表示

Cloudera Managerでは、クラスタで実行された、YARN(MapReduceやSpark)やImpalaアプリケーションの履歴が一覧ができます。以下のスクリーショットはYARNで実行されたアプリケーションを表示しています。
sparkhistory1.png

アプリケーションの診断データを収集

先ほど実行したHive on Spark(Sparkアプリケーション)の診断データを右側のメニューから取得します。

sparkhistory2.png

sparkhistory3.png

Clouderaのサブスクリプションを契約している場合はサポートに診断データを送ることもできますが、今回は「診断データの収集」ボタンをクリックしてダウンロードしました。「結果データのダウンロード」ボタンを押して各診断情報やメタデータがアーカイブされダウンロードします。
sparkhistory4.png

ダウンロードされたのは次のファイルです。

12c8052f-d78f-4a8e-bba4-a55a2d141fcc.default.20160714-07-56-02.support-bundle.zip

ローカル環境で表示する

ダウンロードデータをSparkの検証環境にアップロード

ダウンロードしたデータをローカルのSpark環境にアップロードし、中身を見てみましょう。

[kawasaki@localhost Desktop]$ unzip -l 12c8052f-d78f-4a8e-bba4-a55a2d141fcc.default.20160714-07-56-02.support-bundle.zip
Archive:  12c8052f-d78f-4a8e-bba4-a55a2d141fcc.default.20160714-07-56-02.support-bundle.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
      485  07-14-2016 00:56   arguments.json
   198309  07-14-2016 00:56   YarnApplicationDiagnosticsCollection-1802.tgz
      179  07-14-2016 00:56   cm_version.json
    62158  07-14-2016 00:56   cm_http_instrumentation.json
       53  07-14-2016 00:56   bundle-meta.json
        1  07-14-2016 00:56   ticket_number.txt
      158  07-14-2016 00:56   license.json
      630  07-14-2016 00:56   performance-data.json
       80  07-14-2016 00:56   trial_status.json
  2176204  07-14-2016 00:56   scm-cluster-description.json
   207009  07-14-2016 00:56   cm_deployment.json
        1  07-14-2016 00:56   comments.txt
---------                     -------
  2645267                     12 files
[kawasaki@localhost Desktop]$

zipファイルを展開

[kawasaki@localhost Desktop]$ unzip 12c8052f-d78f-4a8e-bba4-a55a2d141fcc.default.20160714-07-56-02.support-bundle.zip
Archive:  12c8052f-d78f-4a8e-bba4-a55a2d141fcc.default.20160714-07-56-02.support-bundle.zip
  inflating: arguments.json
  inflating: YarnApplicationDiagnosticsCollection-1802.tgz
  inflating: cm_version.json
  inflating: cm_http_instrumentation.json
  inflating: bundle-meta.json
  inflating: ticket_number.txt
  inflating: license.json
  inflating: performance-data.json
  inflating: trial_status.json
  inflating: scm-cluster-description.json
  inflating: cm_deployment.json
  inflating: comments.txt
[kawasaki@localhost Desktop]$

ここで展開されたファイルのうち、YarnApplication*.tgzファイルにイベントログが含まれています。(それ以外の情報はCloudera Managerのメタデータなどです)。tgzファイルを展開しましょう。

[kawasaki@localhost Desktop]$ tar xvf YarnApplicationDiagnosticsCollection-1802.tgz
diagnostics/
diagnostics/command.log
diagnostics/layout_version.txt
diagnostics/application_1468417076413_0022/
diagnostics/application_1468417076413_0022/spark_event_logs.zip
diagnostics/application_1468417076413_0022/app_info.json
diagnostics/application_1468417076413_0022/app_attempts.json
diagnostics/application_1468417076413_0022/aggregated_logs/
diagnostics/application_1468417076413_0022/aggregated_logs/application_1468417076413_0022/
diagnostics/application_1468417076413_0022/aggregated_logs/application_1468417076413_0022/nightly57-3.gce.cloudera.com_8041
diagnostics/application_1468417076413_0022/aggregated_logs/application_1468417076413_0022/nightly57-4.gce.cloudera.com_8041
[kawasaki@localhost Desktop]$

ここで展開されたspark_event_logs.zipがイベントログです。zipファイルを展開しましょう。

[kawasaki@localhost Desktop]$ unzip diagnostics/application_1468417076413_0022/spark_event_logs.zip
Archive:  diagnostics/application_1468417076413_0022/spark_event_logs.zip
  inflating: application_1468417076413_0022_1
[kawasaki@localhost Desktop]$

イベントログをSpark History Serverのログディレクトリにアップロード

展開したファイルをSpark History Serverにアップロードしましょう。アップロード先はspark.history.fs.logDirectoryプロパティで指定され、今回の環境ではhdfs://localhost:8020/user/spark/applicationHistoryになっています。

[kawasaki@localhost Desktop]$ hdfs dfs -put diagnostics/application_146841 /user/spark/applicationHistory
application_1468416381293_0021/ application_1468417076413_0022/

Sparkのイベントログを収集 (Cloudera Managerを使わない場合)

Cloudera Managerを使わない場合は、イベントログファイルを取得してHistory Serverにアップロードします。設定に依存しますが、イベントログはhdfs://:8020/user/spark/applicationHistory 以下に生成されてます。

Sparkのジョブを実行した環境でログをダウンロードします。

[kawasaki@hoge Desktop]$ hdfs dfs -ls /user/spark/applicationHistory
Found 1 items
-rwxrwx--    1 kawasaki spark    716000 2016-07-19 15:50  /user/spark/applicationHistory/application_1468417076413_0022
[kawasaki@hoge Desktop]$ hdfs dfs -get /user/spark/applicationHistory/application_1468417076413_0022
[kawasaki@hoge Desktop]$

ダウンロードしたファイルをアップロードします。

[kawasaki@localhost Desktop]$ hdfs dfs -put 
application_1468416381293_0022 /user/spark/applicationHistory

Spark History ServerのWebUIで表示

http://:にアクセスして表示します。ローカルで取得したのと同様に表示できますね!Enjoy!

sparkhistory5.png

sparkhistory6.png

sparkhistory7.png

参考情報

http://spark.apache.org/docs/1.6.2/monitoring.html

If Spark is run on Mesos or YARN, it is still possible to reconstruct the UI of a finished application through Spark’s history server, provided that the application’s event logs exist. You can start the history server by executing: