Apache Storm流計算模型 及WordCount源碼實踐
Apache Storm流計算模型
及WordCount源碼實踐(續)
在《Apache Storm流計算模型及WordCount源碼實踐》一文中,我們分享了Storm以本地模式運行WordCount的拓撲Topology,此種模式一般用於測試環境,那麼在生產環境中Storm集群是如何執行Topology,又是如何通過ZooKeeper集群協調整個運行過程,並將結果成功存儲到Redis Cluster的呢?接下來,我們揭開它的神秘面紗!
〇、集群環境準備
我們以表格的形式,陳列出各個集群的部署情況,如下:
一、啟動集群環境
1、ZooKeeper集群環境
分別登錄bigdata112、bigdata113和bigdata114,執行zkServer.sh status查看ZooKeeper啟動狀態,如下:
bigdata112
bigdata113
bigdata114
ZooKeeper集群已經啟動,啟動模式和對應進程如下:
如果執行zkServer.sh status命令後查看不到ZooKeeper運行狀態,可執行zkServer.sh start來啟動ZooKeeper!
2、Apache Storm集群環境
(1)登錄bigdata112伺服器,執行如下命令
storm nimbus &
storm ui &
storm logviewer &
後台啟動主節點的nimbus,Storm UI管理頁面,logviewer日誌查看器,啟動成功後如圖:
(2)登錄bigdata113伺服器,執行如下命令
storm nimbus &
storm supervisor &
storm ui &
storm logviewer &
後台啟動從節點的nimbus,Supervisor服務,Storm UI管理頁面,logviewer日誌查看器,啟動成功後如圖:
(3)登錄bigdata114伺服器,執行如下命令
storm supervisor &
storm logviewer &
後台啟動從節點的Supervisor服務,logviewer日誌查看器,啟動成功後如圖:
我們打開Apache Storm管理頁面查看Storm集群是否啟動成功!如下:
已經啟動成功!
3、Redis集群環境
分別在三台伺服器上執行ps -ef|grep redis,查看Redis進程,如下:
bigdata112
bigdata113
bigdata114
Redis集群已經啟動成功!如果沒有啟動,可在三台伺服器上分別執行Redis-Server redis.conf命令啟動Redis服務。
至此,我們的整個集群運行環境已經準備好!
二、提交Storm topology
我們將在《Apache Storm流計算模型及WordCount源碼實踐》一文中的WordCount源碼做些修改,如下:
1、修改WordCount源碼
(1)WordCountTopology模塊
替換WordCountTopology模塊中Local Mode程序塊,將程序運行模式從Local Mode改為Cluster Mode,如下:
//Cluster Mode, args[0]為topology的名稱,通過參數動態傳遞
try{
StormSubmitter.submitTopology(args[],newConfig(),topology);
}catch(Exception e) {
e.printStackTrace();
}
args[0]是我們將從客戶端動態傳遞的WordCount的topology名稱。
(2)WordCountRedisBolt模塊
修改Redis服務的ip地址,如下:
builder.setHost("192.168.189.112");
2、打包上傳
將程序打包成wordcounttopology.jar上傳至bigdata112的/root/temp目錄下,如圖:
3、提交Storm topology
在bigdata112(nimbus)的/root/temp目錄下執行如下命令:
Storm jar
wordcounttopology.jar
wordcount.WordCountTopology
mywordcounttopology
命令基本格式:
Storm jar
包名
Topology包路徑.Topology主類
topology名稱
本程序中topology名稱通過參數args[0]動態從客戶端動態傳遞!上傳成功後如圖:
登錄Storm UI頁面(地址:192.168.189.112:8080)查看,如下圖:
各組件之間運行協調可通過參數parallelism hint設置,參見官網如下說明:
三、查看各集群運行情況
1、ZooKeeper集群
我們登錄bigdata112,執行zkCli.sh啟動ZooKeeper客戶端,查看Storm信息保存情況,如下:
或者使用ZooKeeper可視化工具打開如下:
ZooKeeper為Storm任務執行提供協調服務,時刻監測各個Supervisor的運行進展和心跳信息。正如我們在《Apache Storm流計算模型及WordCount源碼實踐》分享中所談到的。
2、Storm集群
我們分別登錄bigdata112、bigdata113、bigdata114伺服器,查看Storm的日誌情況,如下:
bigdata112
bigdata113
bigdata114
其中logviewer.log、supervisor.log以及workers-artifacts目錄下worker.log日誌都是重要的日誌,對程序運行有很大的幫助,例如程序不能正常運行時,supervisor會出現進程假死的狀態,屏幕不停地輸出kill: No Such Progress信息,此時就需要查看worker.log日誌。
3、Redis集群
我們任意登錄一台伺服器查看提交的WordCount的任務是否成功運行,這裡我們登錄bigdata114查看,如下:
單詞詞頻統計結果已經保存成功!過一段時間,我們再次查看詞頻統計結果,如下:
每個詞的詞頻從幾十升至幾百,事實上,只要伺服器不中斷,topology沒被kill,詞頻會一直實時統計下去!當然,我們可以點擊Storm UI頁面中WordCount的Topology名稱,進入如下頁面:
點擊頁面中kill按鈕即可將topology殺死!或者在伺服器命令行,輸入
storm kill mywordcounttopology 1
將其在1秒後殺死,如下:
Topology被成功殺死後,在Storm UI管理頁面的Topology列表中將被移除,如下:
釀成此作,實屬不易!真是今日屢屢踩坑,只為明日輕鬆填坑!
TAG:leboop |