在storm主控节点上运行,nimbus进程。html
[hadoop@datanode1 storm]$ storm nimbus >/dev/null 2>&1 & # nimbus进程。java
在storm各个工做节点上运行,supervisor进程。node
[hadoop@datanode1 storm]$ bin/storm supervisor >/dev/null 2>&1 & #supervisor进程python
在storm主控节点上运行,core进程。jvm
[hadoop@datanode1 storm]$ storm ui > /dev/null 2>&1 & #core进程socket
启动后经过http://{nimbus host}:8080观察集群的worker资源使用状况、Topologies的运行状态等信息。oop
Storm UI只提供对topology的监控和统计。Storm不处理计算结果的保存。测试
在storm主节点上运行,ui
1)、Storm后台进程被启动后,将在Storm安装部署目录下的logs/子目录下生成各个进程的日志文件。spa
2)、经测试,Storm UI必须和Storm Nimbus部署在同一台机器上,不然UI没法正常工做,由于UI进程会检查本机是否存在Nimbus连接。
3)、为了方便使用,能够将bin/storm加入到系统环境变量中。
至此,Storm集群已经部署、配置完毕,能够向集群提交拓扑运行了。
storm jar allmycode.jar org.me.MyTopology arg1 arg2 arg3 |
其中,allmycode.jar是包含Topology实现代码的jar包,org.me.MyTopology的main方法是Topology的入口,arg1、arg2和arg3为org.me.MyTopology执行时须要传入的参数。
storm kill {toponame} |
其中,{toponame}为Topology提交到Storm集群时指定的Topology任务名称。
咱们将topology打成jar包后,利用bin/storm这个python脚本,执行如下命令:
bin/storm jar ***.jar com.taobao.MyTopology args |
将jar包提交给storm集群。Storm脚本会启动JVM执行Topology的main方法,执行submitTopology的过程。而submitTopology会将jar文件上传到nimbus,上传是经过socket传输.在storm这个Python脚本的jar方法里可看到:
def jar(jarfile, klass, *args): |
将jar文件的地址设置为环境变量STORM_JAR,这个环境变量在执行submitTopology的时候用到:
//StormSubmitter.java |
经过环境变量找到jar包的地址,而后上传。利用环境变量传参是个小技巧。
其次,nimbus在接收到jar文件后,存放到数据目录的inbox目录,nimbus数据目录的结构:
-nimbus |
更多关于topology提交的源码解析,参看:http://www.blogjava.net/killme2008/archive/2011/11/17/364112.html
[hadoop@master storm]$ bin/storm jar examples/storm-starter/storm-starter-topologies-0.9.3.jar storm.starter.ExclamationTopology ExclamationTopology |
[hadoop@master storm]$ storm kill ExclamationTopology |