本地机器和远端storm集群之间的关系:远端的storm集群是被一个称作Nimbus的控制节点所管理,你的机器与Nimbus通信以提交topology的代码,执行这个topology。而Nimbus会自己主动在集群内部分发你的topology代码, 分配任务给各个机器。你的机器使用一个称为storm的client去和Nimbus通信。storm仅仅有在远程模式的时候才实用; 对于用本地模式开发、測试topology来说是没什么用的。
1. 安装Storm依赖库
2. 安装Zookeeper
storm.zookeeper.servers:
- "127.0.0.1"
# - "server2"
nimbus.host: "127.0.0.1"
storm.local.dir: "/home/XXXX/storm/workdir"
supervisor.slots.ports:
- 6700
- 6701
- 6702
- 6703
以上配置须要在每一个节点,包含Nimbus和Supervisor上配置。且前三项是必须的,第二项假设不设置会报Connection Refused错误。
4. 启动Storm集群
在Nimbus节点上启动Nimbus服务:bin/storm nimbus &
加&是为了在后台执行。否则当前的终端就不能再输入命令了
在Nimbus节点上启动UI: bin/storm ui & 这样就能够通过浏览器在http://nimbus-host:8080上观察整个Storm集群以及Topology的执行情况
在Supervisor节点上启动Supervisor:bin/storm supervisor &
这样整个Storm集群便启动了
5. 本地执行測试程序storm-starter
能够使用maven或lein来解决storm-starter的包依赖问题,可是因为GFW原因,可能有些依赖包无法获取。
故这里採用eclipse自导入包的方法来编译storm-starter
2. 追加源文件storm-start/src/jvm/storm
使用eclipse建立java project。追加twitter4j和storm的jar文件。
File-> New -> Java Project ->随便取个名字-> Next -> Libraries -> add External JARs...-> 追加twitter4j和storm的jar文件(/path/to/twitter4j/lib/*.jar和/path/to/storm/lib/*.jar和/path/to/storm/storm-{version}.jar)-> Finsh
导入storm-start
File -> Import -> General -> File System -> Next -> Browse(From directory) -> /path/to/storm-start/src/jvm/storm -> Browse(Info floder) -> xxx -> src -> OK -> “storm” 和 “Create top-level folder”前打勾 -> Finish
完毕之后如图:
3. 追加源文件storm-start/multilang/resources(python 文件word count用)
File -> Import -> General -> File System -> Next -> Browse(From directory) -> /path/to/storm-start/multilang/resources -> Browse(Info floder) -> xxx -> OK -> check “resources” and “Create top-level folder” -> Finish
2个源文件都追加好之后。eclipse左边显演示样例如以下图:
假设使用的是storm-0.8.1,以下这行代码会报错。下载0.8.2版本号就可以解决
假设以下这行报错。说明没有commons-collections.jar包。下载地址:http://commons.apache.org/proper/commons-collections/download_collections.cgi
4. JAR export
File -> Export -> JAR -> JAR file -> 取消 “.classpath” ,“.project” 和 “<.settings” ->的勾 browse -> path/to/export/name.jar -> Finish (忽视 warnings)
可能会报错说PrintSampleStream和TwitterSampleSpout这两个类找不到,将这两个类的凝视取消掉就可以。
5. 运行刚才编译的文件
...
11367 [Thread-25] INFO backtype.storm.daemon.task - Emitting: class storm.starter.ExclamationTopology$ExclamationBolt source: 2:3, stream:
1, id: {}, [golda!!!]
....