在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 |