先ほど、こんなエントリを書きました。
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 on YARN - KZKY memo
・Spark DriverはClient内で起動される.
・Clientはアプリを立ち上げたら,アプリ終了まで生きている.
それでは、先ほどのエントリで作ったプログラムを、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で実行してみるという目標は達成できました。