LoginSignup
4
1

More than 5 years have passed since last update.

Sparkのkubernetes native supportについて

Last updated at Posted at 2016-12-25

大変遅れてクリスマスに投稿ですが、こちらはOpt Technologies Advent Calendar 201614日目の記事です。

2016/12/25現在、Apache Sparkは以下の3種類のクラスタマネージャをサポートしています。

  • Standalone
  • YARN
  • Mesos

これに加えてkubernetesをサポートするissueが、最近活発に動いています。

(k8s公式のSpark Exampleは、k8sでStandaloneクラスタを組む例なので、native supportではない)

ここでは、k8sで下記のforkを動かして、kubernetes native supportを体験してみます。(当該issueを解決するPRのプロトタイプにあたるもののようです)

前提

  • jdk 1.7以上
  • mvn
  • kubernetesクラスタの用意(minikubeでも可)

動かす

こちらのREADMEをなぞっていくだけです。

$ git clone git@github.com:foxish/spark.git -b k8s-support --depth 1
$ cd spark
$ ./build/mvn -Pkubernetes -Phadoop-2.4 -Dhadoop.version=2.4.0 -DskipTests package

ビルドが無事終了したら、Spark Jobをsubmitしてみます。
k8s-supportブランチではspark.kubernetes.sparkImageオプションでdockerイメージ?が渡せるようになっています。

$ ./bin/spark-submit --deploy-mode cluster --class org.apache.spark.examples.SparkPi --master k8s://default --conf spark.executor.instances=5 --conf spark.kubernetes.sparkImage=manyangled/kube-spark:dynamic http://storage.googleapis.com/foxish-spark-distro/original-spark-examples_2.11-2.1.0-SNAPSHOT.jar 10000
2016-12-25 11:47:32 WARN  NativeCodeLoader:62 - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
2016-12-25 11:47:32 INFO  KubernetesClusterScheduler:54 - Created KubernetesClusterScheduler instance
2016-12-25 11:47:33 WARN  KubernetesClusterScheduler:66 - Instances: 5
2016-12-25 11:47:33 INFO  KubernetesClusterScheduler:54 - Starting spark driver on kubernetes cluster
2016-12-25 11:47:33 INFO  KubernetesClusterScheduler:54 - Using as kubernetes-master: k8s://192.168.99.100
...

ここでkubectlでk8sクラスタ内部の状態を見てみます。

$ kubectl get pods                                                                                                                                                                                      k8s-support
NAME                                  READY     STATUS    RESTARTS   AGE
spark-driver-fp7sd                    1/1       Running   0          23s
spark-executor-impz7-1                1/1       Running   0          13s
spark-executor-impz7-2                1/1       Running   0          13s
spark-executor-impz7-3                1/1       Running   0          13s
spark-executor-impz7-4                1/1       Running   0          13s
spark-executor-impz7-5                1/1       Running   0          13s 
$ kubectl logs -f spark-driver-fp7sd
...
2016-12-25 02:52:29 INFO  TaskSetManager:54 - Finished task 6924.0 in stage 0.0 (TID 6927) in 357 ms on localhost (executor 2) (6925/10000)
2016-12-25 02:52:29 INFO  TaskSetManager:54 - Starting task 6929.0 in stage 0.0 (TID 6932, localhost, executor 5, partition 6929, PROCESS_LOCAL, 5863 bytes)
2016-12-25 02:52:29 INFO  TaskSetManager:54 - Starting task 6930.0 in stage 0.0 (TID 6933, localhost, executor 4, partition 6930, PROCESS_LOCAL, 5863 bytes)
2016-12-25 02:52:29 INFO  TaskSetManager:54 - Finished task 6926.0 in stage 0.0 (TID 6929) in 288 ms on localhost (executor 4) (6926/10000)
2016-12-25 02:52:29 INFO  TaskSetManager:54 - Finished task 6925.0 in stage 0.0 (TID 6928) in 333 ms on localhost (executor 5) (6927/10000)
2016-12-25 02:52:29 INFO  TaskSetManager:54 - Starting task 6931.0 in stage 0.0 (TID 6934, localhost, executor 3, partition 6931, PROCESS_LOCAL, 5863 bytes)
2016-12-25 02:52:29 INFO  TaskSetManager:54 - Finished task 6927.0 in stage 0.0 (TID 6930) in 287 ms on localhost (executor 3) (6928/10000)
...

指定した数のexecutorが立ち上がって、タスクが進捗していることが分かります。

まとめ

SPARK-18278を見る限り、長期化しそうに見えます。(YARN/Mesosをサポートした際にバグが増えてリリースサイクルに影響が出た、などが懸念されています

とはいえk8sはかなりメジャーなクラスタ管理ツールとなってきていて、サポートされればSparkのユースケースも増えそうですので、今後も動向に注目です。

4
1
0

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
4
1