Edited at

RaspberryPi で ApacheSparkを動かす

More than 1 year has passed since last update.


はじめに


前提

RaspberryPi3を使用しています。

RaspberryPiがネットに繋がる状態であることとします。(固定IPで)

RaspberryPi3のOSはRaspbianを使用しています。

固定IPでRaspberryPi3に無線LAN設定までは記事にしていますので以下をご覧ください。

RaspberryPi3のOS(Raspbian)インストールから無線LAN設定まで


クラスター構成

RasberryPiを4台用意したので、1台をmaster、その他3台をslaveとしました。


RasberryPiにSparkを入れる

この設定は各RasberryPiで行う必要があります。

RasberryPiのユーザーは標準のpiを使用しました。その他のユーザーを使用したい場合は各RasberryPiでユーザー作成を行い、スイッチしてから作業してください。


RasberryPiにJava8のインストール

すでにjavaが入っている場合は飛ばしてください。

$ apt-cache search oracle jdk

$ sudo apt-get update
$ sudo apt-get install oracle-java8-jdk


/etc/hostnameの設定

各RasberryPiをIPでなくhost名で管理するために設定します。

自分でわかりやすい名前をつけてください。

$ sudo vi /etc/hostname


/etc/hostsの設定

各RasberryPiに通信する際楽になるので設定します。

/etc/hostnameの設定でつけたhostnameとそのRasberryPiのIPを全マシン分記載してください。

$ sudo vi /etc/hosts

例として参考までに載せておきます。


/etc/hosts

##### ↓のlocalhostやipv6はコメントアウトしています。

#127.0.0.1 localhost
#::1 localhost ip6-localhost ip6-loopback
#ff02::1 ip6-allnodes
#ff02::2 ip6-allrouters
#127.0.1.1 raspberrypi

##### ↓が各RasberryPiのホスト名(今回追記分)
192.168.11.10 green01
192.168.11.11 blue01
192.168.11.12 pink01
192.168.11.13 clear01


RasberryPiを再起動する

$ sudo reboot


masterからslaveへSSHする際PWを求められないように、鍵を配置する

この作業はmasterのRasberryPiのみで大丈夫です。

$ ssh-keygen

$ ssh-copy-id pi@green01
$ ssh-copy-id pi@blue01
$ ssh-copy-id pi@pink01
$ ssh-copy-id pi@clear01


Sparkをダウンロードする

2016/11/28時点で最新だったものをダウンロードしています。

version 2.0.2

$ wget http://d3kbcqa49mib13.cloudfront.net/spark-2.0.2-bin-hadoop2.7.tgz

$ tar xzvf spark-2.0.2-bin-hadoop2.7.tgz


Sparkの設定

修正対象は以下の2ファイルです。


  • conf/slaves

  • conf/spark-env.sh

conf/slavesはmasterだけ設定しておけばいいのですが、conf/spark-env.shについてはslaveにも同様のファイルを配置する必要があります。

例としてgreen01というhostnameのRaspberryPiをmasterとします。


conf/slavesの設定

$ cd spark-2.0.2-bin-hadoop2.7/

$ cp conf/slaves.template conf/slaves
$ vi conf/slaves

conf/slavesの末尾にslaveのhostnameを追記してください。

例として参考までに載せておきます。


conf/slaves

blue01

pink01
clear01


conf/spark-env.shの設定

$ cd spark-2.0.2-bin-hadoop2.7/

$ cp conf/spark-env.sh.template conf/spark-env.sh
$ vi conf/spark-env.sh

conf/spark-env.shの末尾に追記してください。

例として参考までに載せておきます。

パラメータ値は自由に設定してください。


conf/spark-env.sh

SPARK_MASTER_IP=green01

SPARK_EXECUTOR_MEMORY=512m
SPARK_DRIVER_MEMORY=512m
SPARK_EXECUTOR_INSTANCES=3

※このconf/spark-env.shはslaveの同パスに配置する必要があります。


Sparkを動かす

ようやくここまできました。

ここの作業はmasterで行ってください。


SparkClusterの起動

$ cd spark-2.0.2-bin-hadoop2.7/

$ ./sbin/start-all.sh

起動しているかWebにアクセスして確認してみてください。

"http://(masterのIPアドレス):8080"

うまく行っていれば「Workers」にslave達が羅列されていると思います。

もしされていなければもう一度設定を見なおしてみてください。


Sparkを実行する

以下のコマンドで「--master spark://(masterのIPアドレス):7077」は各自置き換えてください。

$ bin/spark-submit --class org.apache.spark.examples.GroupByTest --master spark://(masterのIPアドレス):7077 examples/jars/spark-examples_2.11-2.0.2.jar 30


SparkClusterの停止

$ cd spark-2.0.2-bin-hadoop2.7/

$ ./sbin/stop-all.sh


参考

Raspberry Pi 2 2台でApache Sparkの並列分散処理を試す


おわりに

永かった・・・

無事RaspberryPi達を労働者にすることができました。

次はCassandra入れてみようと思います。