リアルタイム処理for Big DataのStormのサンプルを動かしてみる
Dempsyに続きまして,Stormです.
リアルタイム処理 for Big DataのDempsyのサンプルを動かしてみる - なぜか数学者にはワイン好きが多い
まず,StormはZeroMQが必要なのでインストールします.
> wget http://download.zeromq.org/zeromq-2.2.0.tar.gz > tar xvf zeromq-2.2.0.tar.gz > cd zeromq-2.2.0 > ./configure --with-pgm # PGMはオプションだが,zeromqパッケージにライブラリが付属している > make > make check ================== All 9 tests passed ================== > su # make install
次に,ZeroMQのJavaバインディングをインストールします.node.jsバインディングもインストールに苦労しましたが(CとRubyは簡単だった気がします),ちょっと苦労しました.
> git clone https://github.com/nathanmarz/jzmq.git Cloning into 'jzmq'... error: Could not resolve host: github.com (Timeout while contacting DNS servers) while accessing https://github.com/nathanmarz/jzmq.git/info/refs fatal: HTTP request failed
いきなりhttps:やhttp:じゃgitのcloneが作れなかったので,git:プロトコルに変更して逃げます.
> git clone git://github.com/nathanmarz/jzmq.git Cloning into 'jzmq'... remote: Counting objects: 611, done. remote: Compressing objects: 100% (203/203), done. remote: Total 611 (delta 319), reused 561 (delta 293) Receiving objects: 100% (611/611), 303.58 KiB | 205 KiB/s, done. Resolving deltas: 100% (319/319), done. > cd jzmq/ > setenv JAVA_HOME /usr/local/openjdk6 > setenv JAVAC /usr/local/openjdk6/bin/javac > setenv CPPFLAGS -I/usr/local/openjdk6/include/freebsd > ./autogen.sh > ./configure configure: error: don't know how to find jni_md.h on this platform
FreeBSDは無視されているようなので,ちょっとだけconfigureに変更を加えます.
> emacs configure *freebsd*) CPPFLAGS="$CPPFLAGS -I${JAVA_HOME}/include/freebsd" ;; > ./configure > gmake Making all in src gmake[1]: Entering directory `/home/tetu-s/jzmq/src' gmake[1]: *** No rule to make target `classdist_noinst.stamp', needed by `org/zeromq/ZMQ.class'. Stop. gmake[1]: Leaving directory `/home/tetu-s/jzmq/src' gmake: *** [all-recursive] Error 1
...autoconfか何かのバグくさいので,ベタに作られたMakefileを見て対処をがんばります.
> cd src/ > touch classdist_noinst.stamp > gmake classnoinst.stamp CLASSPATH=.:./.${CLASSPATH:+":$CLASSPATH"} /usr/local/openjdk6/bin/javac -d . org/zeromq/ZMQ.java org/zeromq/ZMQException.java org/zeromq/ZMQQueue.java org/zeromq/ZMQForwarder.java org/zeromq/ZMQStreamer.java echo timestamp > classnoinst.stamp > cd .. > gmake > su # gmake install
ZooKeeperやStormのスクリプトがBashを求めるようなので,インストールします.
> cd /usr/ports/shells/bash > make > su # make install
ローカルモードでもZooKeeperは必須なので,インストールします.
> wget http://ftp.yz.yamagata-u.ac.jp/pub/network/apache/zookeeper/zookeeper-3.4.3/zookeeper-3.4.3.tar.gz > tar xvf zookeeper-3.4.3.tar.gz > cd zookeeper-3.4.3 > cp conf/zoo_sample.cfg conf/zoo.cfg > ./bin/zkServer.sh start JMX enabled by default Using config: /home/tetu-s/zookeeper-3.4.3/bin/../conf/zoo.cfg Starting zookeeper ... STARTED
いよいよStorm本体をインストールします.解凍してコピーするだけですが.
> wget --no-check-certificate https://github.com/downloads/nathanmarz/storm/storm-0.8.0.zip > unzip storm-0.8.0.zip > su # mv storm-0.8.0 /usr/local/ # ln -s /usr/local/storm-0.8.0 /usr/local/storm # emacs /usr/local/storm/bin/storm # FreeBSDはPythonの場所が違ったので直す --- #!/usr/bin/python ----> #!/usr/local/bin/python --- # exit
この時点で,Stormのデーモンを立ち上げることができます.
> /usr/local/storm/bin/storm nimbus > /usr/local/storm/bin/storm supervisor > /usr/local/storm/bin/storm ui
UIデーモンを立ち上げると,すぐにブラウザ経由でコントロールパネルを見ることができます.
WordCountのサンプルプログラムを取り寄せます.
> git clone git://github.com/nathanmarz/storm-starter.git Cloning into 'storm-starter'... remote: Counting objects: 404, done. remote: Compressing objects: 100% (150/150), done. remote: Total 404 (delta 188), reused 387 (delta 177) Receiving objects: 100% (404/404), 57.38 KiB, done. Resolving deltas: 100% (188/188), done.
mavenでとりあえず実行,ゴー!
> cd storm-starter/ > mvn -f m2-pom.xml compile exec:java -Dexec.classpathScope=compile -Dexec.mainClass=storm.starter.WordCountTopology | & less
こんなふうに,ワードカウントされています.
12140 [Thread-25] INFO backtype.storm.daemon.task - Emitting: split default ["seven"]
12140 [Thread-19] INFO backtype.storm.daemon.executor - Processing received message source: split:5, stream: default, id: {}, ["seven"]
12140 [Thread-19] INFO backtype.storm.daemon.task - Emitting: count default [seven, 21]12156 [Thread-19] INFO backtype.storm.daemon.executor - Processing received message source: split:6, stream: default, id: {}, ["seven"]
12156 [Thread-19] INFO backtype.storm.daemon.task - Emitting: count default [seven, 22]
12159 [Thread-19] INFO backtype.storm.daemon.executor - Processing received message source: split:7, stream: default, id: {}, ["seven"]
12159 [Thread-19] INFO backtype.storm.daemon.task - Emitting: count default [seven, 23]
参考としては,作者の一人のNathan Marzのプレゼンが凄く分かりやすかったです.
ETE 2012 - Nathan Marz on Storm on Vimeo