Raspberry Pi 2でApache Spark環境構築

th_raspi-double

ちょっと必要に駆られてApache Sparkの勉強をすることになりました。実際に手を動かして勉強したいところですが、なにせ分散処理技術なので、できれば複数台のPCを用意して試したいところです。が、そんなお金はございません。

ということで、できる限り低価格で分散環境を構築するため、Rasbperry Pi 2を2台使ってSparkを試してみたいと思います。

 

こんな酔狂なことをやっている先人っているのかしら、と思ったら、いました。

ありがたく参照させていただくことにします。今日の記事は上記の記事をベースに、少しだけ内容を補足したものになります。

Sparkどうこうをする前に、Raspberry Piの基本のセットアップを先にやってしまいます。ゼロから環境を立ち上げるのは久しぶりです。

NOOBSでRaspbianをインストールして、最初に表示されるraspi-config画面では以下の項目だけ設定。

Internationalisation Options

12 Change Timezone -> Asia -> Tokyo

ロケーションは文字化けとかの考慮が面倒なのでそのままにしています。キーボードも最初しか使わない(後はSSHログインでMacから操作する)ので、USのままです。

再起動してユーザpiでログインしたら、とりあえず

$ sudo apt-get update

してから、使い慣れたエディタ(自分の場合はvim)をインストール。

$ sudo apt-get install vim

それから、固定IPの割り振り設定。エディタで以下のファイルを編集します。

$ sudo vim /etc/network/interfaces

編集内容についてはネット上の至るところにあるので、割愛させていただきます。例えばこちらとか。

ここまで済んだら、以後はSSHでログインして操作します。今Raspberry Pi 2は2個用意しているので、ここまでの作業を2回やります。もちろん固定IPは別にして。

それから、初期設定だと2台ともホスト名がraspberrypiになっていて紛らわしいので、ホスト名も変更しておきます。root権限で、”/etc/hosts”と”/etc/hostname”で”raspberrypi”となっているところを、それぞれのRaspberry Piで”raspiA”, “raspiB”のように編集してから、再起動します。互いにホスト名でアクセスしたい場合は、それぞれの”/etc/hosts”に、互いのIPアドレスとホスト名を追加しておきましょう。

 

では、本筋のApache Sparkの環境を構築していきたいと思います。Apache SparkはJava 6以上とPython 2.6以上があれば動くということなので、まずそれらがインストールされているか確認。

$ python -V
Python 2.7.3
$ java -version
java version "1.8.0"
Java(TM) SE Runtime Environment (build 1.8.0-b132)
Java HotSpot(TM) Client VM (build 25.0-b70, mixed mode)

昔はjavaは後で自分でインストールしていたのですが、今はデフォルトで入っているようです。素晴らしい。

環境は確認できたので、Apache Sparkをダウンロードしてきます。ダウンロードページを見ていると何かすごい勢いでバージョンが上がっていっていますが、とりあえずこの記事執筆時点(2015/05/01)で最新のspark-1.3.1-bin-hadoop2.6.tgzをダウンロードしてきます。

$ wget http://ftp.meisei-u.ac.jp/mirror/apache/dist/spark/spark-1.3.1/spark-1.3.1-bin-hadoop2.6.tgz

通常ならダウンロードしてきたら即展開なのですが、参照記事ではSpark用のユーザを作成することを推奨されているので、そのようにします。

$ sudo adduser spark
Adding user `spark' ...
Adding new group `spark' (1004) ...
Adding new user `spark' (1001) with group `spark' ...
Creating home directory `/home/spark' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for spark
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n] Y

ついでに、作成したユーザsparkをsudoユーザに追加しておきます。これをやっとかないと、sparkユーザでSSHログインしているときに、ログイン元から”$ sudo shutdown -h now”でシャットダウンできないので。

$ sudo usermod -G sudo spark

アカウント作成とsudoユーザ追加ができたら、一度ログアウトしてsparkでログインします。それから、sparkのホームディレクトリ内で、さっき落としてきた圧縮ファイルを展開します。

$ tar xzvf ~pi/spark-1.3.1-bin-hadoop2.6.tgz

解凍できたら、spark-1.3.1-bin-hadoop2.6に移動して、Java (Scala)のサンプルを実行してみます。

$ cd spark-1.3.1-bin-hadoop2.6
$ bin/run-example SparkPi 10

実行してみると、なんか色々コンソールを流れていきますが、実行が完了すると、流れていった文字列の真ん中ぐらいの行に

Pi is roughly 3.141756

のような表示が見つかるはずです。最初名前を見て勘違いしていましたが、実行したサンプルは円周率を求めるプログラムであって、特にRaspberry Pi環境での実行に特化したサンプルというわけではありません。

これでとりあえずSparkをRaspberry Pi 2上で実行できることは確認できました。ただ、これだと何をやっているのかよくわからないので、次回はもうちょっと中身をちゃんと見ていきたいと思います。