はじめに
前提
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
例として参考までに載せておきます。
##### ↓の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を追記してください。
例として参考までに載せておきます。
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の末尾に追記してください。
例として参考までに載せておきます。
パラメータ値は自由に設定してください。
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入れてみようと思います。