とりあえずTezのswimlanesを動かしてみた

Pig on Tezを動かしてみたの続編。 Hadoopソースコードリーディングでも話題にありましたTezのツールであるswimlanesを動かしてみました。

swimlanesは、TezのApplicationMasterが出力したログをもとに、"どのコンテナ"で"どのような処理"が"いつ"実行していたかを可視化する仕組みです。 Hadoopソースコードリーディングもそうでしたが、Hadoop Summitでも発表者の方々が熱く語っていた内容です。

swimlanes実行に関する前提条件

YARNのログ集約機能が有効であることが必須です。ResourceManagerとNodeManagerの設定ファイルyarn-site.xmlに、以下のプロパティをtrueとして記述します。

<property>
  <name>yarn.log-aggregation-enable</name>
  <value>true</value>
</property>

設定をした後に、ResourceManagerとNodeManagerを起動します。ログ集約機能がfalse(無効)の場合は、swimlanesも利用できません。

swimlanesの所在

Tezリポジトリ内に"tez-tools"ディレクトリがあります。その中にswimlanesに関する資材が一式配置されています。

[user@dev apache-tez]$ ll -R tez-tools/
tez-tools/:
合計 4
drwxrwxr-x. 2 user user 4096  9月  6 06:45 2014 swimlanes

tez-tools/swimlanes:
合計 28
-rw-rw-r--. 1 user user 1485  9月  6 06:45 2014 README.md
-rw-rw-r--. 1 user user 8044  9月  6 06:45 2014 amlogparser.py
-rw-rw-r--. 1 user user 8551  9月  6 06:45 2014 swimlane.py
-rw-rw-r--. 1 user user  980  9月  6 06:45 2014 yarn-swimlanes.sh

この中資材のうち、yarn-swimlanes.sh を実行します。

swimlanesの実行

yarn-swimlanes.sh の引数は、TezのアプリケーションIDを指定します。 Tezを実行したアプリケーションIDを指定します。

[root@client swimlanes]# bash yarn-swimlanes.sh application_1410702156554_0001
Fetching yarn logs for application_1410702156554_0001
14/09/14 07:03:44 INFO client.RMProxy: Connecting to ResourceManager at 192.168.73.XX/192.168.73.XX:18032
14/09/14 07:03:44 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

アプリケーションを実行すると、同じディレクトリにアプリケーションID名が含まれるSVGファイルが生成されます。

[root@client swimlanes]# ls -l
合計 64
-rw-rw-r--. 1 hadoop hadoop  1485  9月  6 06:45 2014 README.md
-rw-rw-r--. 1 hadoop hadoop  8044  9月  6 06:45 2014 amlogparser.py
-rw-r--r--. 1 root   root   13536  9月 14 06:57 2014 amlogparser.pyc
-rw-r--r--. 1 root   root   17472  9月 14 07:03 2014 application_1410702156554_0001.svg
-rw-rw-r--. 1 hadoop hadoop  8551  9月  6 06:45 2014 swimlane.py
-rwxrwxr-x. 1 hadoop hadoop   980  9月  6 06:45 2014 yarn-swimlanes.sh

このSVGファイルにアプリケーションの実行状況を可視化した結果が含まれています。 SVGファイルをPNGファイルに変換するとかは各自で実施する必要があります。

SVGファイルの展開

先日実行したPig on Tezアプリケーションの結果を可視化してみました。(※画像は横に長いです。)

f:id:sinchii:20140914231234p:plain

さすがに小さすぎるので、実際に処理を実行している部分を切り出します。

f:id:sinchii:20140914234141p:plain

コンテナIDごとに、どの時間帯にどの処理を実行していたかを人目で把握することができます。

今回はサンプルデータを実行したため、コンテナ数が少なく見栄えとしては少々不足していますが、実際に大量のデータを実行する場合は、この画面も賑やかになることでしょう。

おわりに

swimlanesは、どの処理がどの時間帯に実行していたかを人目で把握できるという点で非常に有用です。 処理の連携状況の確認だけでなく、処理のチューニングのための材料にも利用できそうです。 Pig on Tezに限らず、Tezアプリケーションであれば利用できます。

Tezアプリケーションのチューニングなどアプリケーション単位での実行状況という点で、どんどん利用したいですね。

(swimlanesは、Tezアプリケーション単位での可視化ですが、YARNクラスタのレイヤーでの可視化も重要です。JMXやApplicationTimelineを利用するだけでなく、もっと違う仕組みが必要になるかもしれませんね。