Sparkでjarファイルからプログラムを実行する
前回 でSparkの擬似分散環境構築とインタラクティブシェル上からのプログラム実行まで行ったので、今回はjarファイルからのプログラム実行を行います。
環境
- CentOS6.6
- CDH 5
- IntelliJ IDEA 14
参考サイト
- http://qiita.com/imaifactory/items/823caa33639196f5459a
- http://kubotti.hatenablog.com/entry/2015/10/02/160104
Sparkアプリケーションの開発環境構築
SparkはIntelliJでの開発が推奨らしいので、今回はIntelliJを使います。IntelliJのインストール及びSBTプラグインのインストールは省略します。
SBTプロジェクト作成
- File->New->Project
- SBTを選択
sbt-assemblyのインストール
SparkでJARファイルを実行する場合は、単独ファイルで起動可能なJARにする事は推奨されています。なのでsbt-assemblyを使ってJARを作成します。
sbt 0.13.6以降なら以下の1行をplugin.sbtに追加するだけでOKです。それ以前の場合はhttps://github.com/sbt/sbt-assembly#setupを参考にしてください。
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.0")
build.sbtに依存ライブラリを記述
Sparkの依存ライブラリをbuild.sbtに記述します。注意点として同じライブラリの複数バージョンへの参照が発生した場合sbt assembly
実行時にエラーが出るので、Merge Strategyを記述する必要があります。自分の環境では以下のbuild.sbtで動きました。
プログラム及びJARファイル作成
プログラム作成
今回は、S3からファイルを取得してWordCountするシンプルなプログラムを書きました。
gzファイルも勝手に解凍してくれるのは便利ですね。あとアクセスキーは環境変数にExportしても動きます。
JARファイル生成
IntelliJのSBT Consoleを起動し、assemly
コマンドを実行。SUCCESSが出ればOK
> assembly . . . [success] Total time: 14 s, completed 2015/11/10 18:56:04
Spark上でJARファイルを実行
JARファイルを任意の場所に置き、以下のコマンドを実行。
sudo -u hdfs spark-submit --master "local" --class sample.Sample1 /path/to/YourProgram.jar
以下のように結果が出力されれば成功です。
. . . total lines: 4646 Lines with Dog: 3446, Lines with Cat: 567
ちなみにyarn-clientモードでの実行だと以下のようなコマンドになります。
sudo -u hdfs spark-submit \ --class sample.Sample1 \ --master yarn-client \ --driver-memory 1g \ --executor-memory 1g \ --executor-cores 1 \ /path/to/YourProgram.jar
終わり
今回はここまでにします。次回はyarn-clusterモードでの実行かSpark Streamingの実行を試す予定です。