Search on the blog

2016年6月4日土曜日

Sparkのテンプレートプロジェクトを作る

giter8のtemplatesのリストを参照すると、Sparkのテンプレートがあるようだ。
これを使うと、Sparkのsbtプロジェクトを簡単に作成することができる。

テンプレート生成
$ g8 nttdata-oss/basic-spark-project.g8

A basic spark application project 

name [Basic Spark]: spark-sample
package [com.example]: com.kenjih
version [0.0.1]: 0.0.1
context [anonymous] 3:18 attribute organization isn't defined
context [anonymous] 25:28 attribute organization isn't defined

Template applied in ./spark-sample

生成されたファイルの確認
$ find spark-sample 
spark-sample
spark-sample/assembly.sbt
spark-sample/build.sbt
spark-sample/project
spark-sample/project/assembly.sbt
spark-sample/project/plugins.sbt
spark-sample/README.rst
spark-sample/src
spark-sample/src/main
spark-sample/src/main/scala
spark-sample/src/main/scala/com
spark-sample/src/main/scala/com/kenjih
spark-sample/src/main/scala/com/kenjih/GroupByTest.scala
spark-sample/src/main/scala/com/kenjih/RandomTextWriter.scala
spark-sample/src/main/scala/com/kenjih/SparkHdfsLR.scala
spark-sample/src/main/scala/com/kenjih/SparkLR.scala
spark-sample/src/main/scala/com/kenjih/SparkLRTestDataGenerator.scala
spark-sample/src/main/scala/com/kenjih/SparkPi.scala
spark-sample/src/main/scala/com/kenjih/WordCount.scala
spark-sample/src/main/scala/com/kenjih/Words.scala
spark-sample/src/test
spark-sample/src/test/scala
spark-sample/src/test/scala/com
spark-sample/src/test/scala/com/kenjih
spark-sample/src/test/scala/com/kenjih/SparkPiSpec.scala

設定ファイルの中身を見ておく。
PROJECT_DIR/project/plugins.sbt
sbtプラグインの設定
 - eclipse
 - idea

PROJECT_DIR/project/assembly.sbt
sbtプラグインの設定
 - sbt-assembly

※  sbt-assemblyはプロジェクトと依存ライブラリをまとめてJARにする機能を提供するプラグイン。

PROJECT_DIR/build.sbt
sbtのビルド設定。
 - spark
 - hadoop

PROJECT_DIR/assembly.sbt
sbt-assemblyの定義。jarのファイル名とか。

このファイルの中には以下の記述がある。
run in Compile <<= Defaults.runTask(fullClasspath in Compile, mainClass in (Compile, run), runner in (Compile, run))

これは、"provided"スコープのライブラリもjarに含めるという設定。
これを書かないと"provided"スコープのライブラリはjarファイルには含まれない。
"provided"スコープは、コンテナ(Sparkなど)側で提供されるライブラリなのでアセンブルされるjarからは除外するという意味。
jarファイルはspark-submitするときに使うだけだという場合は、この行は不要なので削除していい気がする。

実行
まずはユニットテストから。
$ sbt test
テストは円周率の計算を乱択で行うもので稀に失敗するので注意。  

次にJarにアセンブルして、spark上で実行してみる。
sbt assembly
PROJECT_DIR/target/scala-2.10/spark-sample.jarが生成される。

このjarをspark-submitして実行する。
spark-submit --master local --class com.kenjih.SparkPi target/scala-2.10/spark-sample.jar
pi: 3.146のように計算された円周率が標準出力に表示される。

0 件のコメント:

コメントを投稿