Mac
Apache
Spark

Apache Sparkをスタンドアロンで実行

More than 3 years have passed since last update.

Apache Sparkをスタンドアロンで実行してみます。

https://spark.apache.org/docs/latest/quick-start.html

↑公式にある「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ファイルを作成し、

以下の内容を記述します。


/tmp/spark-sample/simple.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

次はアプリケーションです


/tmp/spark-sample/src/main/scala/SimpleApp.scala

/* 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