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

Apache Stormを動かす(複数台で動かす、Distributed Mode編)

More than 3 years have passed since last update.

※こちらを参照した。

9 Apache Stormを動かすに従って、単体動作まで完了させる。

10 ZooKeeprをDistributed Modeで動かす。

  • ZooKeeper.mdの第2章のみを実行して、ZooKeeperをDistributed Modeで実行する。

11 Stormクラスタの設定を行う。(root権限で実行)

  • stormの設定は、storm.yaml というファイルを作りますが、 stormのサーバの設定用のstorm.yaml と、クライアントの設定用のstorm.yamlがあるので注意が必要です。 サーバ用とは、stormを動かすための設定で、nimbusとsupervisorで通信したり、zookeeperとやりとりをするための設定です。 クライアント用とは、stormにtopologyを投入する時に、workerはいくつにする、などの設定です。

サーバーとなるvm1上で実行すること。

11.1 サーバー用設定を編集する。

  • まず、server設定用を編集します。 server用の設定は、Stormをインストールしたディレクトリを$STORMHOMEとしたとき、$STORMHOME/conf にあります。

  • ※今回はvm1.soushi.jp〜vm5.soushi.jpまで5台あるとする。

  • ※ワーカーが使うポート番号は6700〜6703の4ワーカー分。

storm.zookeeper.servers

su
cp /usr/local/storm/conf/storm.yaml /usr/local/storm/conf/storm.yaml.bak
echo "# This is a list of the hosts in the Zookeeper cluster for your Storm cluster." >> /usr/local/storm/conf/storm.yaml
echo "storm.zookeeper.servers:" >> /usr/local/storm/conf/storm.yaml
echo "- '192.168.66.201'" >> /usr/local/storm/conf/storm.yaml
echo "- '192.168.66.202'" >> /usr/local/storm/conf/storm.yaml
echo "- '192.168.66.203'" >> /usr/local/storm/conf/storm.yaml
echo "- '192.168.66.204'" >> /usr/local/storm/conf/storm.yaml
echo "- '192.168.66.205'" >> /usr/local/storm/conf/storm.yaml

storm.local.dir

echo "" >> /usr/local/storm/conf/storm.yaml
echo "# The Nimbus and Supervisor daemons require a directory on the local disk" >> /usr/local/storm/conf/storm.yaml
echo "# to store small amounts of state (like jars, confs, and things like that)." >> /usr/local/storm/conf/storm.yaml
echo "# You should create that directory on each machine, give it proper permissions, " >> /usr/local/storm/conf/storm.yaml
echo "# and then fill in the directory location using this config." >> /usr/local/storm/conf/storm.yaml
echo "storm.local.dir: '/tmp/storm'" >> /usr/local/storm/conf/storm.yaml

nimbus.host

echo "" >> /usr/local/storm/conf/storm.yaml
echo "# The worker nodes need to know which machine is the master in order to download " >> /usr/local/storm/conf/storm.yaml
echo "# topology jars and confs." >> /usr/local/storm/conf/storm.yaml
echo "nimbus.host: '192.168.66.201'" >> /usr/local/storm/conf/storm.yaml

supervisor.slots.ports:

echo "" >> /usr/local/storm/conf/storm.yaml
echo "# For each worker machine, you configure how many workers run on that machine" >> /usr/local/storm/conf/storm.yaml
echo "# with this config. Each worker uses a single port for receiving messages, " >> /usr/local/storm/conf/storm.yaml
echo "# and this setting defines which ports are open for use. If you define five ports here," >> /usr/local/storm/conf/storm.yaml
echo "# then Storm will allocate up to five workers to run on this machine. If you define" >> /usr/local/storm/conf/storm.yaml
echo "# three ports, Storm will only run up to three. By default, this setting is configured" >> /usr/local/storm/conf/storm.yaml
echo "# to run 4 workers on the ports 6700, 6701, 6702, and 6703. " >> /usr/local/storm/conf/storm.yaml
echo "supervisor.slots.ports:" >> /usr/local/storm/conf/storm.yaml
echo "- 6700" >> /usr/local/storm/conf/storm.yaml
echo "- 6701" >> /usr/local/storm/conf/storm.yaml
echo "- 6702" >> /usr/local/storm/conf/storm.yaml
echo "- 6703" >> /usr/local/storm/conf/storm.yaml
echo "- 6704" >> /usr/local/storm/conf/storm.yaml
echo "- 6705" >> /usr/local/storm/conf/storm.yaml
echo "- 6706" >> /usr/local/storm/conf/storm.yaml
echo "- 6707" >> /usr/local/storm/conf/storm.yaml
echo "- 6708" >> /usr/local/storm/conf/storm.yaml
echo "- 6709" >> /usr/local/storm/conf/storm.yaml
  • ※他にも設定できるパラメータはいくつかあります。デフォルトではdefaults.yamlの値が使われます。

11.2 storm.local.dirを作成する。

  • 第11.1章で設定したstorm.local.dirを、実際に作成します。
mkdir /tmp/storm

クライアントとなるvm2〜vm5上で実行すること。

11.3 Stormのクライアントの設定

  • stormのクライアント、stormクラスタに対してtopologyをsubmitする役割を持ちます。 そのため、その設定にはnimbusのIP addressが必要です。
  • stormのクライアントの設定は、 ~/.storm/storm.yaml に記述します。
su
mkdir ~/.storm/
echo "nimbus.host: 'vm1.soushi.jp'" >> ~/.storm/storm.yaml

ローカル端末(Mac)で実行すること。

12 サンプルプログラムを実行する。

12.1 サンプルプログラムのダウンロード

mkdir ~/storm-project
cd ~/storm-project/
git clone git://github.com/nathanmarz/storm-starter

12.2 ログ出力のためのディレクトリを作成する。

cd ~/storm-project/storm-starter/
mkdir log

12.3 Mavenでサンプルコードをコンパイルする。

pom.xmlが無いというエラーがでるので、m2-pom.xmlをpom.xmlにリネームします。

cd ~/storm-project/storm-starter/
mv m2-pom.xml pom.xml
mvn compile exec:java -Dstorm.topology=storm.starter.WordCountTopology
mvn package

謎のエラーが発生したら、Mavenのローカルフォルダを削除すると解決する可能性あり

rm -rf ~/.m2/

12.4 実行

12.4.1 ZooKeeperを起動する。

zkServer.sh start &

12.4.2 Stormを起動する。

storm logviewer &
storm ui &
storm nimbus &
storm supervisor &
  • Stormの動作状況はlocalhost:8080で確認できる。
  • ※今回は192.168.66.201上で動いているので、http://192.168.66.201:8080/にアクセスする。

12.4.3 サンプルプログラムを実行する。

  • ~/storm-project/storm-starter/target/フォルダ配下に、storm-starter-..*-SNAPSHOT-jar-with-dependencies.jarが作成されているので、それを実行する。

  • ※Exclamation Topologyを実行する場合

cd ~/storm-project/storm-starter/target/
storm jar storm-starter-0.0.1-SNAPSHOT-jar-with-dependencies.jar storm.starter.ExclamationTopology test
  • ※RollingTopWordsを実行する場合
cd ~/storm-project/storm-starter/target/
storm jar storm-starter-0.0.1-SNAPSHOT-jar-with-dependencies.jar storm.starter.RollingTopWords
soushiy
Customer Engineer at Google
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