Spark のアプリケーション構成の概要と、簡単なアプリケーション作成までをまとめました.
0.前提
Scalaでアプリケーションを書いていきます.
Sparkのインストールはこちらを参考に済ませておいてください.
SBT(Scalaのビルドツール)のインストールはこちらを参考に済ませておいてください.(Sparkをdockerイメージ上で利用する場合、そのイメージファイル上にインストールする必要があります.)
1.構成概要
テストドライバとなるクラス(SparkTest)
- mainメソッドが定義されている
- 引数の構文解析を行う
- 引数を元に、Sparkを実行する環境を定義する(SparkContext)
SparkContext
- Mesosマスターの名前、ジョブを割り当てる対象の名前を引数にする
2. アプリの実装
sbtファイルの作成
1 2 3 4 5 6 7 8 9 |
$ pwd /usr/local/spark # アプリを作成する場所を用意 $ mkdir sample_app $ cd sample_app # sbtファイルの用意 $ vi sparktest.sbt |
<sparktest.sbtの中身>
1 2 3 4 5 6 7 8 9 |
name := "Simple Project" version := "1.0" scalaVersion := "2.10.4" libraryDependencies += "org.apache.spark" %% "spark-core" % "1.0.1" resolvers += "Akka Repository" at "http://repo.akka.io/releases/" |
SparkTestの作成
1 |
$ vi SparkTest.scala |
<SparkTest.scalaの中身>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
package org.apache.spark.examples import org.apache.spark.SparkContext import org.apache.spark.SparkContext._ import org.apache.spark.SparkConf object SparkTest { def main( args: Array[String] ) { if (args.length == 0) { System.err.println("Usage: SparkTest <host> [<slices>]") System.exit(1) } val path = "file:///usr/local/spark/sample_app/" val spark = new SparkContext(args(0), "SparkTest") val slices = if (args.length >1 ) args(1).toInt else 2 val myFile = spark.textFile(path + "test.txt") val counts = myFile.flatMap(line => line.split(" ")) .map(word => (word, 1)) .reduceByKey(_ + _) counts.saveAsTextFile(path + "out") } } |
ビルド
1 2 3 4 5 6 |
$ sbt package ... [info] Done packaging. [success] Total time: 5 s, completed Dec 7, 2014 2:58:23 AM |
最後にsuccessの行が表示されれば完了です.sbtの初回実行時には依存性解決のためにそこそこ時間がかかります.(自分の環境だと10分程)
その後はクラス数にもよると思いますが、そこそこ速く ビルドできます.
3.アプリの実行
事前にインプットとなるファイルを作成します
1 |
$ vi /usr/local/spark/sample_app/test.txt |
<test.txt の中身>
1 2 3 4 5 6 7 8 9 10 11 |
aa bbbb cc d dd d aa bbbb cc |
実行
1 2 3 4 5 6 7 |
# sparkのインストールフォルダへ移動 $ cd /usr/local/spark # 実行 $ ./bin/spark-submit \ --class "org.apache.spark.examples.SparkTest" \ /usr/local/spark/sample_app/target/scala-2.10/sparktest-in-sbt_2.10-1.0.jar local[1] |
結果の確認
1 |
$ cat /usr/local/spark/sample_app/out/part-00000 |
各行の内容がキーとなり、その出現回数がカウントされていることが確認できます.
1 2 3 4 5 6 |
(d,2) (aa,2) (dd,1) (bbbb,2) (,2) (cc,2) |