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のファイル名とか。- spark
- hadoop
PROJECT_DIR/assembly.sbt
このファイルの中には以下の記述がある。
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 assemblyPROJECT_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.jarpi: 3.146のように計算された円周率が標準出力に表示される。
0 件のコメント:
コメントを投稿