お試し用にdockerでspark / spark-shellを触ってみる

全体の流れ

dockerイメージはいろいろあるが、以下を利用
https://github.com/Semantive/docker-spark

docker-composeで master x 1、worker x 2 のdockerベースのsparkクラスタを単一node上に簡単に作れる。

そしてspark-shellで以下のquick startを試す
https://spark.apache.org/docs/latest/quick-start.html

1. dockerでsparkクラスタ立ち上げ

事前にgit、docker/docker-composeがインストールされている必要があるが、その方法は割愛。

手順は、下記サイトからdockerfileをcloneして、docker-compose upするだけ。
https://github.com/Semantive/docker-spark

git clone https://github.com/Semantive/docker-spark.git

cd ./docker-spark/

docker-compose up

しばらくすると、masterとworkerのコンテナが立ち上がる

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                                                                            NAMES
5b391b766cbc        semantive/spark     "bin/spark-class org…"   2 hours ago         Up About an hour    0.0.0.0:8081->8081/tcp                                                                           dockerspark_worker1_1
12a25ad7a708        semantive/spark     "bin/spark-class org…"   2 hours ago         Up About an hour    0.0.0.0:8082->8082/tcp                                                                           dockerspark_worker2_1
ef6cf053d560        semantive/spark     "bin/spark-class org…"   2 hours ago         Up About an hour    0.0.0.0:4040->4040/tcp, 0.0.0.0:6066->6066/tcp, 0.0.0.0:7077->7077/tcp, 0.0.0.0:8080->8080/tcp   dockerspark_master_1

2. spark-shellをたたいてみる

masterノードでspark-shellを実行するだけ

docker exec -it [masterのcontainer id] spark-shell

例)
docker exec -it ef6cf053d560 spark-shell

すると、以下のようにspark-shellが起動し、scalaでインタラクティブに処理を実行できる。

Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /___/ .__/\_,_/_/ /_/\_\   version 2.1.1
      /_/

Using Scala version 2.11.8 (OpenJDK 64-Bit Server VM, Java 1.8.0_131)
Type in expressions to have them evaluated.
Type :help for more information.

scala> 

Quick Startを実行してみる
https://spark.apache.org/docs/latest/quick-start.html

scala> val textFile = spark.read.textFile("README.md")
textFile: org.apache.spark.sql.Dataset[String] = [value: string]

scala> textFile.count()
res0: Long = 104

scala>  textFile.first()
res1: String = # Apache Spark

scala> val linesWithSpark = textFile.filter(line => line.contains("Spark"))
linesWithSpark: org.apache.spark.sql.Dataset[String] = [value: string]

scala> textFile.filter(line => line.contains("Spark")).count()
res2: Long = 20

else b)textFile.map(line => line.split(" ").size).reduce((a, b) => if (a > b) a
res3: Int = 22

とりあえず動いた。

ちなみに、AWSのt2.microのように、リソーススペックが低すぎると処理が重すぎて動かない可能性あり。

3.モニタリング

http://[host IP]:8080で、Sparkが提供するGUIにもアクセスできる。

spark.png

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.