Taste of Tech Topics

Acroquest Technology株式会社のエンジニアが書く技術ブログ

Stormを簡単にインストールする方法は?(その2

こんにちは。kimukimuです。

Storm0.8.0やら、実世界での用途を確認して間が空いちゃいましたが、
Stormを簡単にインストールする方法の続きを確認してみます。

というわけで、前回作成したrpmの動作を確認します。

1.仮想マシンの設定

まっさらな環境にインストールして確認する必要があるため、仮想マシンの構築です。

まず対象とする環境はCentOS6.2の64bit。
下記のように、Basic Serverとしてマシンを構築します。

構築後、IPアドレスを割り振り、ホスト名を/etc/hostsに記述しておきましょう。

2.前提ソフトウェアのインストール(rpm他)

復習になりますが、Stormの動作に必要なソフトウェアは下記です。

  • ZeroMQ 2.1.7
  • JZMQ
  • Zookeeper
  • Java 6
  • Python 2.6.6
  • unzip

上記の設定で仮想マシンを構築した場合前提条件6個のうち、初めから下記の前提条件は満たしています。

そのため、下記のソフトウェアを追加でインストールします。

  • ZeroMQ 2.1.7
  • JZMQ
  • Zookeeper
ZeroMQ 2.1.7

前回作成したrpmファイルを使ってインストールを行います。

[root@installtest storm]# ls
jzmq-2.1.0-1.el6.x86_64.rpm        zeromq-2.1.7-1.el6.x86_64.rpm
jzmq-devel-2.1.0-1.el6.x86_64.rpm  zeromq-devel-2.1.7-1.el6.x86_64.rpm
[root@installtest storm]# rpm -i zeromq-2.1.7-1.el6.x86_64.rpm
エラー: 依存性の欠如:
	uuid は zeromq-2.1.7-1.el6.x86_64 に必要とされています
// uuidが足りないため、ダウンロードしてインストール
[root@installtest storm]# wget http://isoredirect.centos.org/centos/6.2/os/x86_64/Packages/uuid-1.6.1-10.el6.x86_64.rpm
[root@installtest storm]# ls
jzmq-2.1.0-1.el6.x86_64.rpm        zeromq-2.1.7-1.el6.x86_64.rpm
jzmq-devel-2.1.0-1.el6.x86_64.rpm  zeromq-devel-2.1.7-1.el6.x86_64.rpm
uuid-1.6.1-10.el6.x86_64.rpm
// uuidをインストール
[root@installtest storm]# rpm -i uuid-1.6.1-10.el6.x86_64.rpm
// ZeroMQをインストール
[root@installtest storm]# rpm -i zeromq-2.1.7-1.el6.x86_64.rpm
[root@installtest storm]# rpm -i zeromq-devel-2.1.7-1.el6.x86_64.rpm

これでZeroMQはインストール完了です。

JZMQ

こちらもZeroMQと同じく、前回作成したrpmファイルを使用してインストールを行います。

// ZooKeeperをダウンロード
[root@installtest storm]# rpm -i jzmq-2.1.0-1.el6.x86_64.rpm
[root@installtest storm]# rpm -i jzmq-devel-2.1.0-1.el6.x86_64.rpm

非常にあっさりしていますが、これでJZMQはインストール完了です。

Zookeeper

ZookeeperについてはCDH4のZookeeperがそのまま使えます。
とりあえず簡単にインストールするのが目的のため、あるものは使わせていただく方向で^^;

// パッケージをダウンロード
[root@installtest storm]# wget http://archive.cloudera.com/cdh4/redhat/6/x86_64/cdh/4/RPMS/noarch/bigtop-utils-0.4+299-1.cdh4.0.0.p0.27.el6.noarch.rpm
[root@installtest storm]# wget http://archive.cloudera.com/cdh4/redhat/6/x86_64/cdh/4/RPMS/noarch/zookeeper-3.4.3+14-1.cdh4.0.0.p0.27.el6.noarch.rpm
[root@installtest storm]# wget http://archive.cloudera.com/cdh4/redhat/6/x86_64/cdh/4/RPMS/noarch/zookeeper-server-3.4.3+14-1.cdh4.0.0.p0.27.el6.noarch.rpm
[root@installtest storm]# ls
bigtop-utils-0.4+299-1.cdh4.0.0.p0.27.el6.noarch.rpm
jzmq-2.1.0-1.el6.x86_64.rpm
jzmq-devel-2.1.0-1.el6.x86_64.rpm
uuid-1.6.1-10.el6.x86_64.rpm
zeromq-2.1.7-1.el6.x86_64.rpm
zeromq-devel-2.1.7-1.el6.x86_64.rpm
zookeeper-3.4.3+14-1.cdh4.0.0.p0.27.el6.noarch.rpm
zookeeper-server-3.4.3+14-1.cdh4.0.0.p0.27.el6.noarch.rpm
// インストール
[root@installtest storm]# rpm -i bigtop-utils-0.4+299-1.cdh4.0.0.p0.27.el6.noarch.rpm
[root@installtest storm]# rpm -i zookeeper-3.4.3+14-1.cdh4.0.0.p0.27.el6.noarch.rpm
[root@installtest storm]# rpm -i zookeeper-server-3.4.3+14-1.cdh4.0.0.p0.27.el6.noarch.rpm

これで前提ソフトウェアのインストールは完了です。
結構コマンドが多いようにみえますが、
やっていることは「rpmファイルをダウンロードしてインストールする」というだけです。

リポジトリを立てれば、ここまでは全てyumコマンドで自動化することができるでしょう。

3.Stormのインストール

Stormのインストール自体はStorm Wikiからダウンロードして展開するのみです。
インストール先は「/opt/storm」として進めます。

// Stormをダウンロード
[root@installtest storm]# wget https://github.com/downloads/nathanmarz/storm/storm-0.8.0-SNAPSHOT.zip
[root@installtest storm]# unzip storm-0.8.0-SNAPSHOT.zip
[root@installtest storm]# mv storm-0.8.0-SNAPSHOT /opt/storm

これで展開は完了ですので、設定ファイルの設定を行います。
対象は「bin/storm」と、「conf/storm.yaml」です。

■bin/storm

// CONF_DIRをインストール先のパスに修正。
// デフォルトではstormユーザのホームディレクトリ配下となり、
// 存在しない場合一部のコマンドが動作しないため。
CONF_DIR = "/opt/storm/conf/"

■conf/storm.yaml

nimbus.host: "【仮想マシンのIPアドレス】"
storm.local.dir: "/opt/storm"
storm.zookeeper.servers:
    - "【仮想マシンのIPアドレス】"

これでStormのインストールも完了です。

4.Stormを起動!

では、Stormを起動してみます。

// Stormデーモンプロセスを起動
[root@installtest storm]# /opt/storm/bin/storm nimbus &
[root@installtest storm]# /opt/storm/bin/storm ui &
[root@installtest storm]# /opt/storm/bin/storm supervisor &

無事起動します。UIもこの通り表示できます。

では、最後にTopologyの動作確認です。

5.Topologyの起動

StormStarterのExclamationTopologyを用いて確認を行います。
ただし、Workerプロセスは4個と設定します。

理由は、Worker間の通信が発生しないとフル機能の確認ができないからです。
1Workerプロセス内で完結する場合、内部メモリでTupleのやり取りが行われる関係上、
シリアライズもZeroMQによる通信も行われないわけなんですね。

で、起動してみたところ・・・・Workerのログにこんなメッセージが。
端的に言うとZeroMQ/JZMQが存在せずに一切他Workerとの通信が出来ない状態になっています(汗

2012-07-01 20:46:07 worker [ERROR] Error on initialization of server mk-worker
java.lang.UnsatisfiedLinkError: no jzmq in java.library.path
	at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1681)
        (中略)
	at backtype.storm.daemon.worker.main(Unknown Source)

見事にこけてしまったようですので、とりあえず問題を次回確認してみます。
そう一筋縄ではいかないようですねぇ・・・