hatunina’s blog

メモと日記です

Macでspark-jobserverのサンプルを動かす&Tips

職場のWin10環境でハマりまくっているのでMacでサクッとやってみる。
基本的にレポジトリ周辺にまとめられているドキュメントを参照しただけです。

まずレポジトリをクローン github.com

docker

docker run -d -p 8090:8090 sparkjobserver/spark-jobserver:0.7.0.mesos-0.25.0.spark-1.6.2 


http://localhost:8090/にアクセスしてSpark Job Server UIが立ち上がっていることを確認
dockerについては詳しくはこちらへ
github.com

sbt

Scalaなので?sbtを使います。

brew install sbt
#クローンしたレポジトリへ移動
sbt job-server-tests/package
ls job-server-tests/target/scala-2.11/
# classes                      job-server-tests_2.11-0.8.1-SNAPSHOT.jar


packageコマンドでjob-server-testsのサンプルプログラムをjarにします。
初回は諸々ライブラリのインストールで時間がかかるっぽいです。

jobserverにjarをアップロード

作ったjarをアップロードします。
localhostやjarファイル名は環境によって書き換えます。

curl --data-binary @job-server-tests/target/scala-2.11/job-server-tests_2.11-0.8.1-SNAPSHOT.jar localhost:8090/jars/test

UIでjarsタブにjarが登録されたことを確認

サンプルを動かす

# Scalaサンプル
curl -d "input.string = a b c a b see" "localhost:8090/jobs?appName=test&classPath=spark.jobserver.WordCountExample"

#{
#  "duration": "Job not done yet",
#  "classPath": "spark.jobserver.WordCountExample",
#  "startTime": "2018-07-11T13:06:57.151Z",
#  "context": "17178e37-spark.jobserver.WordCountExample",
#  "status": "STARTED",
#  "jobId": "b9e2d9ed-dcec-44ed-8e6c-66cb5b55b76f"
#}

curl localhost:8090/jobs/b9e2d9ed-dcec-44ed-8e6c-66cb5b55b76f

#{
#  "duration": "4.114 secs",
#  "classPath": "spark.jobserver.WordCountExample",
#  "startTime": "2018-07-11T13:06:57.151Z",
#  "context": "17178e37-spark.jobserver.WordCountExample",
#  "result": {
#    "a": 2,
#    "b": 2,
#    "see": 1,
#    "c": 1
#  },
#  "status": "FINISHED",
#  "jobId": "b9e2d9ed-dcec-44ed-8e6c-66cb5b55b76f"
#}


Tips

ScalaではなくJavaの場合は先にコンテキストを指定する必要がある

curl -d "" "localhost:8090/contexts/jcontext?context-factory=spark.jobserver.context.JavaSparkContextFactory"


・READMEのバージョンをよく見て、spark-jobserver, Spark, Scalaのバージョンをちゃんと合わせないと普通に動かなかったりする

・諸事情でsbtが使えない -> Mavenを使う -> Mavenレポジトリからspark-jobserverが取得できないよ!ってなる
JitPackを使うか直接jarを落として(http://dl.bintray.com/spark-jobserver/maven/)プロジェクトに追加&pomにこんな感じで追加する(このときバージョンミスると辛いことになる)

  <dependency>
    <groupId>spark-jobserver</groupId>
    <artifactId>job-server-api</artifactId>
    <scope>system</scope>
    <version>0.62</version>
    <systemPath>path/job-server-api_2.11-0.6.2-sources.jar</systemPath>
  </dependency>