Help us understand the problem. What is going on with this article?

RaspberryPi で ApacheSparkを動かす

More than 3 years have 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入れてみようと思います。

tMatSuZ
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away