Apache Storm 官方文檔 —— Storm 集群安裝配置
本文詳細介紹了 Storm 集群的安裝配置方法。如果需要在 AWS 上安裝 Storm,你應該先了解一下 storm-deploy 項目。storm-deploy 可以自動完成 E2 上 Storm 集群的準備、配置、安裝的全部過程,同時還設置好了 Ganglia,方便監控 CPU、磁盤以及網絡的使用信息。
如果你在使用 Storm 集群時遇到問題,請先查看“問題與解決”一文中是否已有相應的解決方案。如果檢索不到有效的解決方法,請向社區的郵件列表發送關於問題的郵件。
以下是安裝 Storm 的步驟:
- 安裝 ZooKeeper 集群;
- 在各個機器上安裝運行集群所需要的依賴組件;
- 下載 Storm 安裝程序並解壓縮到集群的各個機器上;
- 在 storm.yaml 中添加集群配置信息;
- 使用 “storm” 腳本啟動各機器後台進程。
安裝 ZooKeeper 集群
Storm 使用 ZooKeeper 來保證集群的一致性。集群中 ZooKeeper 並不是用來進行消息傳遞的,所以 Storm 對 ZooKeeper 的負載相當低。雖然在大部分場景下單點 ZooKeeper 也勉強夠用,但是如果你需要更可靠的 HA 機製或者需要部署大規模 Storm 集群,你最好配置一個 ZooKeeper 集群。ZooKeeper 集群的部署說明請參考此文。
關於 ZooKeeper 部署的幾點說明:
- ZooKeeper 必須在監控模式下運行。因為 ZooKeeper 是個快速失敗係統,如果遇到了故障,ZooKeeper 服務會主動關閉。更多詳細信息請參考此文。
- 需要設置一個 cron 服務來定時壓縮 ZooKeeper 的數據與事務日誌。因為 ZooKeeper 的後台進程不會處理這個問題,如果不配置 cron,ZooKeeper 的日誌會很快填滿磁盤空間。更多詳細信息請參考此文。
安裝必要的依賴組件
接下來你需要在集群中的所有機器上安裝必要的依賴組件,包括:
- Java 6(推薦使用 JDK 7 以上版本 —— 譯者注)
- Python 2.6.6(推薦使用 Python 2.7.x 版本 —— 譯者注)
以上均為在 Storm 上測試通過的版本。Storm 並不保證對其他版本的 Java 或 Python 的支持。
下載 Storm 安裝程序並解壓
接下來就要下載需要的 Storm 發行版,並將 zip 安裝文件解壓縮到集群中的各個機器上。Storm 的發行版可以在這裏下載(推薦在 Storm 官方網站的下載頁麵使用 Apache 的鏡像服務下載 —— 譯者注)。
配置 storm.yaml
Storm 的安裝包中包含一個在 conf 目錄下的 storm.yaml
文件,該文件是用於配置 Storm 集群的各種屬性的。你可以在這裏查看各個配置項的默認值。storm.yaml 會覆蓋 defaults.yaml 中各個配置項的默認值。以下是幾個在安裝集群時必須配置的選項:
1) storm.zookeeper.servers:這是 Storm 關聯的 ZooKeeper 集群的地址列表,此項的配置是如下所示:
storm.zookeeper.servers:
- "111.222.333.444"
- "555.666.777.888"
注意,如果你使用的 ZooKeeper 集群的端口不是默認端口,你還需要相應地配置 storm.zookeeper.port。
2) storm.local.dir:Nimbus 和 Supervisor 後台進程都需要一個用於存放一些狀態數據(比如 jar 包、配置文件等等)的目錄。你可以在每個機器上創建好這個目錄,賦予相應的讀寫權限,並將該目錄寫入配置文件中,如下所示:
storm.local.dir: "/mnt/storm"
3) nimbus.host:集群的工作節點需要知道集群中的哪台機器是主機,以便從主機上下載拓撲以及配置文件,如下所示:
nimbus.host: "111.222.333.44"
4) supervisor.slots.ports:你需要通過此配置項配置每個 Supervisor 機器能夠運行的工作進程(worker)數。每個 worker 都需要一個單獨的端口來接收消息,這個配置項就定義了 worker 可以使用的端口列表。如果你在這裏定義了 5 個端口,那麼 Storm 就會在該機器上分配最多 5 個worker。如果定義 3 個端口,那 Storm 至多隻會運行三個 worker。此項的默認值是 6700、6701、6702、6703 四個端口,如下所示:
supervisor.slots.ports:
- 6700
- 6701
- 6702
- 6703
配置外部庫與環境變量(可選)
如果你需要使用某些外部庫或者定製插件的功能,你可以將相關 jar 包放入 extlib/
與 extlib-daemon
目錄下。注意,extlib-daemon
目錄僅僅用於存儲後台進程(Nimbus,Supervisor,DRPC,UI,Logviewer)所需的 jar 包,例如,HDFS 以及定製的調度庫。另外,可以使用STORM_EXT_CLASSPATH
和 STORM_EXT_CLASSPATH_DAEMON
兩個環境變量來配置普通外部庫與“僅用於後台進程”外部庫的 classpath。
使用 “storm” 腳本啟動後台進程
最後一步是啟動所有的 Storm 後台進程。注意,這些進程必須在嚴格監控下運行。因為 Storm 是個與 ZooKeeper 相似的快速失敗係統,其進程很容易被各種異常錯誤終止。之所以設計成這種模式,是為了確保 Storm 進程可以在任何時刻安全地停止並且在進程重新啟動之後恢複征程。這也是 Storm 不在處理過程中保存任何狀態的原因 —— 在這種情況下,如果有 Nimbus 或者 Supervisor 重新啟動,運行中的拓撲不會受到任何影響。下麵是啟動後台進程的方法:
-
Nimbus:在 master 機器上,在監控下執行
bin/storm nimbus
命令。 -
Supervisor:在每個工作節點上,在監控下執行
bin/storm supervisor
命令。Supervisor 的後台進程主要負責啟動/停止該機器上的 worker 進程。 -
UI:在 master 機器上,在監控下執行
bin/storm ui
命令啟動 Storm UI(Storm UI 是一個可以在瀏覽器中方便地監控集群與拓撲運行狀況的站點)後台進程。可以通過https://{nimbus.host}:8080
來訪問 UI 站點。
可以看出,啟動後台進程非常簡單。同時,各個後台進程也會將日誌信息記錄到 Storm 安裝程序的 logs/ 目錄中(這是 Storm 的默認設置,日誌文件的路徑與相關配置信息可以在 {STORM_HOME}/logback/cluster.xml 文件中修改 —— 譯者注)。
最後更新:2017-05-22 14:02:34