1.概述
在《Kafka實戰-實時日誌統計流程》一文中,談到了Storm的相關問題,在完成實時日誌統計時,我們需要用到Storm去消費Kafka Cluster中的資料,所以,這裡我單獨給大家分享一篇Storm Cluster的搭建部署。以下是今天的分享目錄:
- Storm簡述
- 基礎軟體
- 安裝部署
- 效果預覽
下面開始今天的內容分享。
2.Storm簡述
Twitter將Storm開源了,這是一個分散式的、容錯的實時計算系統,已被貢獻到Apache基金會,下載地址如下所示:
http://storm.apache.org/downloads.html
Storm的主要特點如下:
- 簡單的程式設計模型。類似於MapReduce降低了並行批處理複雜性,Storm降低了進行實時處理的複雜性。
- 可以使用各種程式語言。你可以在Storm之上使用各種程式語言。預設支援Clojure、Java、Ruby和Python。要增加對其他語言的支援,只需實現一個簡單的Storm通訊協議即可。
- 容錯性。Storm會管理工作程式和節點的故障。
- 水平擴充套件。計算是在多個執行緒、程式和伺服器之間並行進行的。
- 可靠的訊息處理。Storm保證每個訊息至少能得到一次完整處理。任務失敗時,它會負責從訊息源重試訊息。
- 快速。系統的設計保證了訊息能得到快速的處理,使用ØMQ作為其底層訊息佇列。
- 本地模式。Storm有一個本地模式,可以在處理過程中完全模擬Storm叢集。這讓你可以快速進行開發和單元測試。
Storm叢集由一個主節點和多個工作節點組成。主節點執行了一個名為“Nimbus”的守護程式,用於分配程式碼、佈置任務及故障檢測。每個工作節 點都執行了一個名為“Supervisor”的守護程式,用於監聽工作,開始並終止工作程式。Nimbus和Supervisor都能快速失敗,而且是無 狀態的,這樣一來它們就變得十分健壯,兩者的協調工作是由Apache的ZooKeeper來完成的。
Storm的術語包括Stream、Spout、Bolt、Task、Worker、Stream Grouping和Topology。Stream是被處理的資料。Spout是資料來源。Bolt處理資料。Task是執行於Spout或Bolt中的 執行緒。Worker是執行這些執行緒的程式。Stream Grouping規定了Bolt接收什麼東西作為輸入資料。資料可以隨機分配(術語為Shuffle),或者根據欄位值分配(術語為Fields),或者廣播(術語為All),或者總是發給一個Task(術語為Global),也可以不關心該資料(術語為None),或者由自定義邏輯來決定(術語為 Direct)。Topology是由Stream Grouping連線起來的Spout和Bolt節點網路。在Storm Concepts頁面裡對這些術語有更詳細的描述。
3.基礎軟體
在搭建Storm叢集時,我們需要有Storm安裝包,這裡我採用的是Apache 版本的Storm安裝包,下載連結如下所示:
Storm安裝包 《下載地址》
Storm安裝包 《下載地址》
ZooKeeper安裝包 《下載地址》
在下載完成相關依賴基礎軟體後,下面我們開始安裝部署Storm叢集。
4.安裝部署
首先,我們解壓相關依賴基礎軟體,關於ZK的安裝環節,這裡不做介紹,大家可以參考我寫的《配置高可用的Hadoop平臺》,裡面有詳細介紹如何安裝ZK的步驟,下面重點介紹Storm叢集搭建詳情。
- 解壓Storm安裝包
[hadoop@dn1 ~]$ tar -zxvf apache-storm-0.9.4.tar.gz
- 配置環節變數
export STORM_HOME=/home/hadoop/storm-0.9.4 export PATH=$PATH:$STORM_HOME/bin
- 配置Storm配置檔案(storm.yaml)
########### These MUST be filled in for a storm configuration storm.zookeeper.servers: - "dn1" - "dn2" - "dn3" storm.zookeeper.port: 2181 nimbus.host: "dn1" supervisor.slots.ports: - 6700 - 6701 - 6702 - 6703 storm.local.dir: "/home/hadoop/data/storm"
下面我們來看Storm的角色分配,如下圖所示:
在配置完成相關檔案後,我們使用scp命令將檔案分發到各個節點,命令如下所示:
[hadoop@dn1 ~]$ scp -r storm-0.9.4/ hadoop@dn2:~/ [hadoop@dn1 ~]$ scp -r storm-0.9.4/ hadoop@dn3:~/
- 啟動ZK叢集
# 分別在三個節點依次啟動zk的服務 [hadoop@dn1 ~]$ zkServer.sh start [hadoop@dn2 ~]$ zkServer.sh start [hadoop@dn3 ~]$ zkServer.sh start
- 啟動叢集
# 在nimbus節點啟動nimbus服務
[hadoop@dn1 ~]$ storm nimbus &
#在supervisor節點分別啟動supervisor服務 [hadoop@dn2 ~]$ storm supervisor & [hadoop@dn3 ~]$ storm supervisor &
- 啟動Storm UI
[hadoop@dn1 ~]$ storm ui &
- 檢視啟動程式
[hadoop@dn1 storm-0.9.4]$ jps 2098 Jps 1983 core 1893 QuorumPeerMain 1930 nimbus
[hadoop@dn2 storm-0.9.4]$ jps 1763 worker 1762 worker 1662 QuorumPeerMain 1765 worker 1692 supervisor 1891 Jps
[hadoop@dn3 storm-0.9.4]$ jps 2016 QuorumPeerMain 2057 supervisor 2213 Jps
5.效果預覽
由於,叢集我做過測試,提交過Topology,所以截圖中會有提交記錄,從上面的dn2節點的程式中也可以看出,有相應的worker程式,若是首次安裝,未提交任務是不會有對應的顯示的,下面附上Storm UI中相關的截圖預覽,如下圖所示:
6.總結
這就是本篇為大家介紹的Storm Cluster的搭建部署,從上面的Storm的分佈圖中我們可以細心的發現,Storm的分佈存在單點問題,國外已經有Storm HA版本,不過這個非官方版本,目前Storm提供了一些機制來保證即使在節點掛了或者訊息被丟失的情況下也能正確的進行資料處理,可以參考官方給出的解決方案,地址如下所示:
http://storm.apache.org/documentation/Guaranteeing-message-processing.html
7.結束語
這篇部落格就和大家分享到這裡,如果大家在研究學習的過程當中有什麼問題,可以加群進行討論或傳送郵件給我,我會盡我所能為您解答,與君共勉!