LoginSignup
1
1

More than 5 years have passed since last update.

storm-mqttを起動させる その2

Posted at

さて、前回の記事の続きです。

Stormおよびstorm-mqttのビルドまではできたので、ここからexamplesを起動させようと思います。

MQTT BrokerとPublisherを起動する

こちらに書いてありますが、まずはMQTT BrokerとPublisherを起動しましょう。実行時のディレクトリはstorm-mqttになります。

java -cp examples/target/storm-mqtt-examples-*-SNAPSHOT.jar org.apache.storm.mqtt.examples.MqttBrokerPublisher

うまく起動しました。

16:12:30.535 [main] INFO  org.apache.storm.mqtt.examples.MqttBrokerPublisher - Starting broker...
16:12:30.923 [main] INFO  org.apache.storm.mqtt.examples.MqttBrokerPublisher - MQTT broker started
16:12:30.954 [hawtdispatch-DEFAULT-1] DEBUG org.apache.storm.mqtt.MqttLogger - Connecting
16:12:31.003 [hawtdispatch-DEFAULT-1] DEBUG org.apache.storm.mqtt.MqttLogger - Transport connected
16:12:31.007 [hawtdispatch-DEFAULT-1] DEBUG org.apache.storm.mqtt.MqttLogger - Logging in
16:12:31.029 [hawtdispatch-DEFAULT-2] DEBUG org.apache.storm.mqtt.MqttLogger - MQTT login accepted
16:12:31.033 [main] INFO  org.apache.storm.mqtt.examples.MqttBrokerPublisher - Publishing to topic /users/tgoetz/office/1234
16:12:31.034 [main] INFO  org.apache.storm.mqtt.examples.MqttBrokerPublisher - Cntrl+C to exit.

サンプルのTopologyを起動する

次に、サンプルとして提供されているTopologyを起動します。

storm jar ./examples/target/storm-mqtt-examples-*-SNAPSHOT.jar org.apache.storm.flux.Flux ./examples/src/main/flux/sample.yaml --local

地味にstormにパスが通っていることが前提ですが、ひとまずstormのリポジトリにbin/stormがあったので、それを動かすようにstormを起動

<stormをcloneしたディレクトリ>/bin/storm jar ./examples/target/storm-mqtt-examples-*-SNAPSHOT.jar org.apache.storm.flux.Flux ./examples/src/main/flux/sample.yaml --local

エラーが出ました。

The storm client can only be run from within a release. You appear to be trying to run the client from a checkout of Storm's source code.

You can download a Storm release at http://storm-project.net/downloads.html

bin配下のstormは、使うな、ということでしょうか。リリースされている媒体のstormを使え、、、と。同ディレクトリにstorm.pyがあり覗きましたが、どうもこれを回避するのは難しそうです。ですので大人しく上記リンクから最新版の0.10.0をDLしてStormを起動しましょう。(ここに落とし穴がある)

DLしたstorm起動スクリプトを使うようにしてコマンドを打つと、こんなメッセージが。

███████╗██╗     ██╗   ██╗██╗  ██╗
██╔════╝██║     ██║   ██║╚██╗██╔╝
█████╗  ██║     ██║   ██║ ╚███╔╝
██╔══╝  ██║     ██║   ██║ ██╔██╗
██║     ███████╗╚██████╔╝██╔╝ ██╗
╚═╝     ╚══════╝ ╚═════╝ ╚═╝  ╚═╝
+-         Apache Storm        -+
+-  data FLow User eXperience  -+
Version: 2.0.0-SNAPSHOT
Parsing file: /Users/KojiIshida/Documents/workspace/personal_git/apache/storm/external/storm-mqtt/./examples/src/main/flux/sample.yaml
462  [main] INFO  o.a.s.f.p.FluxParser - loading YAML from input stream...
464  [main] INFO  o.a.s.f.p.FluxParser - Not performing property substitution.
464  [main] INFO  o.a.s.f.p.FluxParser - Not performing environment variable substitution.
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/storm/Config
    at org.apache.storm.flux.FluxBuilder.buildConfig(FluxBuilder.java:45)
    at org.apache.storm.flux.Flux.runCli(Flux.java:151)
    at org.apache.storm.flux.Flux.main(Flux.java:98)
Caused by: java.lang.ClassNotFoundException: org.apache.storm.Config
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 3 more

現バージョンの0.10.0のstormでは、Configクラスが存在する場所が異なるようです。調べてみると、

  • 0.10.0系:backtype/storm/Config.class
  • 2.0.0系:org/apache/storm/Config.class

こりゃ確かに動かないですな。ということでcloneしているstormのソースから媒体を作成する方法が必要です。

Stormをビルドしてjarファイルを生成する。

こちらにビルド方法が書いてありました。storm-dist内でビルドしろ、と。

で、storm-dist配下で

mvn package

しましたが、

[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 39.244 s
[INFO] Finished at: 2016-03-06T17:25:24+09:00
[INFO] Final Memory: 19M/439M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-gpg-plugin:1.6:sign (default) on project apache-storm-bin: Unable to execute gpg command: Error while executing process. Cannot run program "gpg": error=2, No such file or directory -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.

エラー発生。ただ、このgpgはjarファイルをデプロイする際に必要になるもので、スキップしても大丈夫らしい。(参照元はこちら
※外人さんはようこういうのやるわ。

mvn package -Dgpg.skip

これでビルドが成功するので、ようやく生成されたstorm-coreのtar.gzファイルを適当なフォルダへ。そして起動。

<保存ディレクトリ>/apache-storm-2.0.0-SNAPSHOT/bin/storm jar ./examples/target/storm-mqtt-examples-2.0.0-SNAPSHOT.jar org.apache.storm.flux.Flux ./examples/src/main/flux/sample.yaml --local

動きましたね。。。長かった。

10776 [Thread-32-log-executor[3 3]] INFO  o.a.s.f.w.b.LogInfoBolt - {user=tgoetz, deviceId=1234, location=office, temperature=72.0, humidity=69.0}
11283 [Thread-32-log-executor[3 3]] INFO  o.a.s.f.w.b.LogInfoBolt - {user=tgoetz, deviceId=1234, location=office, temperature=57.0, humidity=8.0}
11789 [Thread-32-log-executor[3 3]] INFO  o.a.s.f.w.b.LogInfoBolt - {user=tgoetz, deviceId=1234, location=office, temperature=49.0, humidity=40.0}
12295 [Thread-32-log-executor[3 3]] INFO  o.a.s.f.w.b.LogInfoBolt - {user=tgoetz, deviceId=1234, location=office, temperature=50.0, humidity=31.0}
12798 [Thread-32-log-executor[3 3]] INFO  o.a.s.f.w.b.LogInfoBolt - {user=tgoetz, deviceId=1234, location=office, temperature=40.0, humidity=40.0}
13305 [Thread-32-log-executor[3 3]] INFO  o.a.s.f.w.b.LogInfoBolt - {user=tgoetz, deviceId=1234, location=office, temperature=16.0, humidity=18.0}
13808 [Thread-32-log-executor[3 3]] INFO  o.a.s.f.w.b.LogInfoBolt - {user=tgoetz, deviceId=1234, location=office, temperature=31.0, humidity=93.0}
14312 [Thread-32-log-executor[3 3]] INFO  o.a.s.f.w.b.LogInfoBolt - {user=tgoetz, deviceId=1234, location=office, temperature=76.0, humidity=39.0}
14820 [Thread-32-log-executor[3 3]] INFO  o.a.s.f.w.b.LogInfoBolt - {user=tgoetz, deviceId=1234, location=office, temperature=29.0, humidity=19.0}
15323 [Thread-32-log-executor[3 3]] INFO  o.a.s.f.w.b.LogInfoBolt - {user=tgoetz, deviceId=1234, location=office, temperature=74.0, humidity=82.0}
15830 [Thread-32-log-executor[3 3]] INFO  o.a.s.f.w.b.LogInfoBolt - {user=tgoetz, deviceId=1234, location=office, temperature=55.0, humidity=6.0}
16332 [Thread-32-log-executor[3 3]] INFO  o.a.s.f.w.b.LogInfoBolt - {user=tgoetz, deviceId=1234, location=office, temperature=92.0, humidity=82.0}
16839 [Thread-32-log-executor[3 3]] INFO  o.a.s.f.w.b.LogInfoBolt - {user=tgoetz, deviceId=1234, location=office, temperature=16.0, humidity=86.0}
17341 [Thread-32-log-executor[3 3]] INFO  o.a.s.f.w.b.LogInfoBolt - {user=tgoetz, deviceId=1234, location=office, temperature=59.0, humidity=46.0}
17848 [Thread-32-log-executor[3 3]] INFO  o.a.s.f.w.b.LogInfoBolt - {user=tgoetz, deviceId=1234, location=office, temperature=69.0, humidity=8.0}
18353 [Thread-32-log-executor[3 3]] INFO  o.a.s.f.w.b.LogInfoBolt - {user=tgoetz, deviceId=1234, location=office, temperature=66.0, humidity=80.0}
18859 [Thread-32-log-executor[3 3]] INFO  o.a.s.f.w.b.LogInfoBolt - {user=tgoetz, deviceId=1234, location=office, temperature=64.0, humidity=44.0}
19365 [Thread-32-log-executor[3 3]] INFO  o.a.s.f.w.b.LogInfoBolt - {user=tgoetz, deviceId=1234, location=office, temperature=38.0, humidity=48.0}
19870 [Thread-32-log-executor[3 3]] INFO  o.a.s.f.w.b.LogInfoBolt - {user=tgoetz, deviceId=1234, location=office, temperature=3.0, humidity=91.0}
20374 [Thread-32-log-executor[3 3]] INFO  o.a.s.f.w.b.LogInfoBolt - {user=tgoetz, deviceId=1234, location=office, temperature=79.0, humidity=48.0}

さて、これでexampleは動かせましたが、実際に便利かどうかは、これを用いてサンプルの実装をしてみないと実感できないですね。その辺は別の回として投稿できれば、と思います。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1