Apache Sparkをスタンドアロンで実行してみます。
↑公式にある「Standalone Applications」ってやつです。
Sparkのアプリケーションを実行するには、
spark-submit
というコマンドを使うみたいです。
注意点として、実行前にアプリケーションをコンパイルして、jarにしておく必要があるとのことです。
それでは、実行してみます。
環境など
・mac os x 10.8.5
・apache sparkはspark-1.1.1-bin-hadoop2.4使用
・使用言語はscala(v2.11.4)
・アプリケーションのコンパイルにはsbtを使用(v0.13.7)
※scalaとsbtのインストールについては↓でやってみました
http://qiita.com/kanuma1984/items/6f599c815cc8f9232228
スタンドアロンで実行
まずサンプル用のディレクトリを作成します
$ cd /tmp
$ mkdir spark-sample
$ mkdir spark-sample/src
$ mkdir spark-sample/src/main
$ mkdir spark-sample/src/main/scala
次にパッケージ管理用のsbtファイルを作成し、
以下の内容を記述します。
name := "Simple Project"
version := "1.0"
scalaVersion := "2.10.4"
libraryDependencies += "org.apache.spark" %% "spark-core" % "1.1.1"
ここで1つハマったのが、
scalaVersionにインストールしたバージョン(2.11.4)を指定すると、コンパイル時にエラーが発生するという。。
sparkがscala 2.11.4に対応していないのが原因なのかな?
公式ドキュメント通り、2.10.4を指定したらうまくいきました。うーんまだまだ謎が多いorz
次はアプリケーションです
/* SimpleApp.scala */
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
object SimpleApp {
def main(args: Array[String]) {
val logFile = "/tmp/spark-1.1.1-bin-hadoop2.4/README.md"
val conf = new SparkConf().setAppName("Simple Application")
val sc = new SparkContext(conf)
val logData = sc.textFile(logFile, 2).cache()
val numAs = logData.filter(line => line.contains("a")).count()
val numBs = logData.filter(line => line.contains("b")).count()
println("Lines with a: %s, Lines with b: %s".format(numAs, numBs))
}
}
これは公式ドキュメントに載っているサンプルなんですけど、README.md内に「a」と「b」という文字列がどれだけあるかをカウントして出力をするサンプルっぽいです。
ではでは実行…の前にコンパイルします。
sbtコマンドを叩くんですけど、最初は結構時間かかります。
ゆっくりお茶でも飲みながら待ちます。
$ cd /tmp/spark-sample
$ sbt package
↑のscalaVersionのエラーは、この時点で発生しました。
これでやっと実行できます。
実行
実行はspark-submitを使います
/tmp/spark-1.1.1-bin-hadoop2.4/bin/spark-submit \
--class "SimpleApp" \
--master local[4] \
target/scala-2.10/simple-project_2.10-1.0.jar
・
・
・
Lines with a: 83, Lines with b: 38
aが83, bが38回出現という結果がでました。
spark-submitのオプションですが、
# 作成したアプリケーションのエントリーポイント
--class "SimpleApp"
# ローカル環境で実行し、[]の中がワーカースレッド数
--master local[4]
# ↓の場合は、ローカル・1ワーカースレッドになります
--master local
# sbtによってコンパイルされたプログラムのjarを指定
target/scala-2.10/simple-project_2.10-1.0.jar
です。
※間違っている箇所がありましたらご指摘下さいm(__)m
これでスタンドアロンでの実行は終了です。
次はtwitter api使ったものを実装してみようかな。
参考
https://spark.apache.org/docs/latest/quick-start.html
https://spark.apache.org/docs/1.1.0/submitting-applications.html
https://spark.apache.org/docs/1.1.0/submitting-applications.html#master-urls