LoginSignup
14

More than 5 years have passed since last update.

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

Posted at

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ファイルを作成し、
以下の内容を記述します。

/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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14