當前位置:
首頁 > 最新 > Apache Storm流計算模型 及WordCount源碼實踐

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列表中將被移除,如下:

釀成此作,實屬不易!真是今日屢屢踩坑,只為明日輕鬆填坑!


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 leboop 的精彩文章:

TAG:leboop |