読者です 読者をやめる 読者になる 読者になる

サナギわさわさ.json

サナギさんとキルミーベイベーとプログラミングが好きです

Sparkでjarファイルからプログラムを実行する

Spark プログラミング

前回 でSparkの擬似分散環境構築とインタラクティブシェル上からのプログラム実行まで行ったので、今回はjarファイルからのプログラム実行を行います。

環境

参考サイト

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の実行を試す予定です。