Raspberry Pi 2でApache Storm環境構築

storm-ui

前に一度やった、Raspberry Piを使った、並列分散処理基盤の評価環境作成の続きです。

Raspberry Pi 2 2台を使ってのApache Sparkの環境構築&並列分散処理のテストは一応できたので、次は同じくRaspberry Pi 2 2台で、Apache Stormの環境構築をしてみたいと思います。

Apache Stormで出てくる用語については、こちらでわかりやすくまとめてくださっています。

ではでは、とりあえずやってみましょう。

まず、個人的に先に作ったSpark環境とごっちゃにしたくないので、2代のRaspberry Piに新しくstormユーザを作って、sudoを利用可能にしておきます。

$ sudo adduser storm
$ sudo usermod -G sudo storm

以下、stormユーザでログインした状態で進めていきます。

Stormクラスタの構築手順については、こちらに公式ドキュメントがあります。

このページを見つけるのに結構時間がかかってしまいまいした。。。自分だけでしょうか。あと、こちらのページも参考になります。

とりあえず、公式ページには以下のように書かれています。

  1. Set up a Zookeeper cluster
  2. Install dependencies on Nimbus and worker machines
  3. Download and extract a Storm release to Nimbus and worker machines
  4. Fill in mandatory configurations into storm.yaml
  5. Launch daemons under supervision using “storm” script and a supervisor of your choice

まずはZookeeperクラスタとやらをセットアップしてやんなくちゃいけません。ZookeeperはStormクラスタにおけるMasterノードである”Nimbus”と、Slaveノードである”Supervisor”の間の協調を担当してくれるらしいです。今はRaspberry Piが2台しかないので、とりあえずNimbus&Zookeeper用、Supervisor用に分けてセットアップしていきます。

ということで、Nimbus&Zookiper用のRaspberry Piの方にZookeeperをダウンロードしてきます。この記事の執筆時点(2015/5/6)時点では、安定版では3.4.6が最新でした。

$ wget http://ftp.jaist.ac.jp/pub/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz
$ tar xzvf zookeeper-3.4.6.tar.gz

とりあえずstandaloneモードで動作させるため、設定ファイル”conf/zoo.cfg”を作成します。

$ cd /home/storm/zookeeper-3.4.6/
$ cd conf
$ cp zoo_sample.cfg zoo.cfg

とりあえずはそのままでOKだと思いますが、上記設定ファイルのdataDirとして設定されている”/tmp/zookeeper”フォルダを作成しておきます。

$ mkdir /tmp/zookeeper

これでとりあえず実行してみます。

$ bin/zkServer.sh start
JMX enabled by default
Using config: /home/storm/zookeeper-3.4.6/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

動きました。。。が、これでいいんだろうか?まあ、ダメだったら後で戻ってくることにします。

続いて、Nimbus&Zookeeper用と、Supervisor用のRaspberry PiにApache Storm本体をダウンロード&解凍します。この記事の執筆時点(2015/5/6)時点では、0.9.4が最新でした。

$ wget http://ftp.yz.yamagata-u.ac.jp/pub/network/apache/storm/apache-storm-0.9.4/apache-storm-0.9.4.tar.gz
$ tar xzvf apache-storm-0.9.4.tar.gz

こちらも設定ファイルを用意してやる必要があります。とりあえずNimbus&Zookeepr用のRaspberry Piの方から設定していきます。

$ cd /home/storm/apache-storm-0.9.4/conf
$ cp storm.yaml storm.yaml.org

バックアップをとっておいて、storm.yamlを設定していきます。特に設定しない場合はdefaults.yamlの値が使用されるので、Nimbus&Zookeepr用のstorm.yamlは適当な箇所に一個だけ追記します。

storm.local.dir: "/tmp/storm"

これに合わせて、上記のディレクトリを作成しておきます。

$ mkdir /tmp/storm

次はSupervisor用のRaspberry Piの方のstorm.yamlを設定してします。こちらはちょっと設定箇所が増えます。

storm.zookeeper.servers:
     - "192.168.24.51"
storm.local.dir: "/tmp/storm"
nimbus.host: "192.168.24.51"

Nimubus&Zookeeper用のRaspberry PiのIPアドレスを設定しています。こちらも同じく、storm.local.dirで指定したディレクトリを作成しておきます。

$ mkdir /tmp/storm

以上で設定は完了です。では、Stormクラスタを立ち上げてみます。

Nimubus&Zookeeper用のRaspberry Piで、Zookeeperをまだ立ち上げていない場合は、先にZookeeperを立ち上げます。いちいちZookeeperとStormのディレクトリを移動するのが面倒であれば、両者のbinにパスを通しておいた方がいいかもしれませんが、ここではそれぞれの解凍ディレクトリに移動して実行しています。

$ bin/zkServer.sh start

起動を確認したら、Stormのディレクトリに移動して、

$ bin/storm nimbus &

次に、Supervisor用のRaspberry Piの方で、

$ bin/storm supervisor &

最後に、もう一度Nimubus&Zookeeper用のRaspberry Piの方で、

$ bin/storm ui &

これで、ブラウザから”http://(Nimubus&Zookeeper用のRaspberry PiのIPアドレス):8080″にアクセスすると、Storm UIが表示されるハズです。ただ、表示されるようになるまで、ちょっと時間がかかります。

storm-ui

今自分はhostnameがraspiAのRaspberry PiをNimbus&Zookeeper用、raspiBのRaspberry PiをSupervisor用に設定しているのですが、Storm UIの”Supervisor summary”から、確かにNimubus&Zookeeper用のRaspberry Piとは別のRaspberry PiがSupervisorとして機能していることが確認できます。

Stormを終了させるとき、Zookeeperは

$ bin/zkServer.sh stop

で終了できますが、それ以外はとりあえず”ps aux”でプロセスIDを調べて手動でkillします。

 

以上、とりあえずRaspberry Pi 2 を2台使ったStorm環境構築はできたようです。次はサンプルプログラムで動作確認をしたいと思います。