Storm是一個分佈式實時計算系統,Storm對於實時計算的意義就至關於Hadoop對於批量計算的意義。對於實時性較高的系統Storm是不錯的選擇。Hadoop提供了map, reduce原語,使批處理程序變得很是地簡單和優美。一樣,storm也爲實時計算提供了一些簡單優美的原語。html
涉及的術語說明:node
Nimbus:Storm集羣的主控節點,負責在Storm集羣內分發代碼,分配任務給工做機器,而且負責監控集羣運行狀態。其進程名爲nimbus。apache
Supervisor:Supervisor負責監遵從Nimbus分配給它執行的任務,據此啓動或中止執行任務的工做進程。其進程名爲supervisor。vim
core:Storm的UI服務進程。網絡
安裝部署前的準備工做:分佈式
1. 配置各主機IP,將各主機IP配置爲靜態IP(保證各主機能夠正常通訊,爲避免過多的網絡傳輸,建議在同一網段)。oop
2. 修改各主機名,Storm集羣中的全部主機都須要修改。ui
3. 配置各主機映射,修改hosts文件,加入各主機IP和主機名的映射。spa
4. 開放相應端口,後面文檔中配置的端口都須要開放(或者關閉防火牆)。code
5. Python2.7及以上版本。
6. 保證Zookeeper集羣服務正常運行。若是在CentOS上安裝過Hadoop或者Zookeeper的話,1-5項基本沒問題。關於Zookeeper參考:http://www.cnblogs.com/wxisme/p/5178211.html。
7. 這裏使用的JDK、Storm版本分別爲1.8和0.9.5。
1. 到Storm官網下載對應的安裝包並上傳到集羣節點。
2. 解壓安裝包
tar -xvzf apache-storm-0.9.5.tar.gz
3. 修改storm.yaml配置文件
vim conf/storm.yaml
Storm集羣使用的Zookeeper集羣地址,根據實際狀況進行修改。
storm.zookeeper.servers: - "node1" - "node2" - "node3"
Zookeeper的端口不是默認端口時須要配置參數:
storm.zookeeper.port: "修改的端口"
Nimbus和Supervisor進程用於存儲少許狀態,如jars、confs等的本地磁盤目錄,須要提早建立該目錄(根據實際狀況建立)並給以足夠的訪問權限。
storm.local.dir: "/usr/storm/data"
Storm集羣Nimbus機器地址,各個Supervisor工做節點須要知道哪一個機器是Nimbus,以便下載Topologies的jars、confs等文件。根據實際狀況進行修改。
nimbus.host: "node3"
對於每一個Supervisor工做節點,須要配置該工做節點能夠運行的worker數量。每一個worker佔用一個單獨的端口用於接收消息,該配置選項即用於定義哪些端口是可被worker使用的。默認狀況下,每一個節點上可運行4個workers,分別在6700、670一、6702和6703端口。根據實際狀況進行修改。
supervisor.slots.ports: - 6700 - 6701 - 6702
DRPC提供了集羣中處理功能的訪問接口,storm集羣drpc地址,根據實際狀況進行修改。關於DRCP參考:http://www.dataguru.cn/article-5572-1.html
drpc.servers: - "node3"
默認狀況下,Storm啓動worker進程時,JVM的最大內存是768M。因爲在使用過程當中,Bolt中加載大量數據,768M內存沒法知足要求,會致使內存溢出。根據實際狀況進行修改。
worker.childopts: "-Xmx1024m"
1. 在主控節點啓動Nimbus服務
bin/storm nimbus >> /dev/null &
查看nimbus服務是否啓動:
jps
2.在各個節點啓動Supervisor服務
bin/storm supervisor >> /dev/null &
3.啓動drpc服務
bin/storm drpc >> /dev/null &
4.在主控節點啓動Storm UI服務
bin/storm ui >> /dev/null &
查看UI服務是否啓動:
jps
訪問Storm UI
http://nimbus:8080/
執行如下命令,啓動Storm Topology:
bin/storm jar test.jar com.test.MyTopology arg1 arg2
其中,test.jar是包含Topology實現代碼的jar包,com.test.MyTopology的main方法是Topology的入口,arg1和arg2爲com.test.MyTopology執行時須要傳入的參數。
中止Storm Topology:
bin/storm kill {toponame}
其中,{toponame}爲Topology提交到Storm集羣時指定的Topology任務名稱。
簡單的Storm集羣就部署好了,能夠開始愉快的Storm之旅了!