CLOVER🍀

That was when it all began.

Apache SparkをYARN上で動かしてみる

先ほど、こんなエントリを書きました。

Apache Sparkで、HDFS上のファイルを読み書きする
http://d.hatena.ne.jp/Kazuhira/20150802/1438499631

ここで使ったプログラムを、YARN上で動かしてみたいと思います。

SparkをYARN上で動かす時は、yarn-clientとyarn-clusterという2種類の起動方法があるみたいです。

Running Spark on YARN
http://spark.apache.org/docs/latest/running-on-yarn.html

参考)
Spark on YARN
http://kzky.hatenablog.com/entry/2015/01/12/Spark_on_YARN

Apache Spark Resource Management and YARN App Models
http://blog.cloudera.com/blog/2014/05/apache-spark-resource-management-and-yarn-app-models/

Spark & YARNを試してみる(前半)
http://open-groove.net/spark/spark-yarn-example/

Spark & YARNを試してみる(後半)
http://open-groove.net/spark/spark-yarn-example2/

しつこいがSpark & YARNの補足
http://open-groove.net/spark/yarn-client-or-cluster-mode/

このあたりを読んでみると、タスク自体は、YARNのNodeManager内で実行されるらしいです。

で、yarn-clientとyarn-clusterでの違いは、Driverプログラムがクライアント側で起動するか(yarn-client)、Application Manager内で起動するか(yarn-cluster)らしいです。位置づけ的には、プロダクション環境でジョブを実行する場合にはyarn-cluster、結果をすぐに確認しかったり、デバッグ用途にはyarn-clientを使おう、みたいな。

こちらの説明が、端的でした。

yarn-cluster mode

・プロダクションむき.
・Spark DriverはYARN Application Master内で起動される.
・Clientはアプリを立ち上げたら,もう落ちて良い.

yarn-client mode

インタラクティブシェル/デバックむき.
・Spark DriverはClient内で起動される.
・Clientはアプリを立ち上げたら,アプリ終了まで生きている.

Spark on YARN - KZKY memo

それでは、先ほどのエントリで作ったプログラムを、YARN上で動かしてみます。なお、実行環境上にはHDFSやYARNのクライアントとしての環境が揃っているものとします。

yarn-clientを実行する場合のコマンド。

# sudo -u spark spark-submit --class org.littlewings.spark.WordCount --master yarn-client /opt/spark-jar/word-count-lucene-analyzer-cdh-hdfs-assembly-0.0.1-SNAPSHOT.jar cdh-server /user/spark/input/README.md /user/spark/output/word-count

「--master yarn-client」と入っているのが特徴です。

いったん、出力結果を削除して…。

# sudo -u spark hdfs dfs -rm -R output/word-count

続いて、yarn-clusterで実行。

# sudo -u spark spark-submit --class org.littlewings.spark.WordCount --master yarn-cluster /opt/spark-jar/word-count-lucene-analyzer-cdh-hdfs-assembly-0.0.1-SNAPSHOT.jar cdh-server /user/spark/input/README.md /user/spark/output/word-count

結果は、割愛します。

また、http://[YARNが動作しているホスト]:8089/cluster/にアクセスすると、ジョブのサマリが見れます。

上が「yarn-clueter」で起動したジョブで、下が「yarn-client」で起動したジョブになります。アプリケーションの名前になんか差が出ていますね。「yarn-client」だとSparkConfで設定した名前で、「yarn-cluster」だと実行したDriver Programの起動クラス名になってます。

まあ、いいんですけど…。

とりあえず、SparkアプリケーションをYARNで実行してみるという目標は達成できました。