1. 程式人生 > >Apache Storm 官方文件 —— Storm 叢集安裝配置

Apache Storm 官方文件 —— Storm 叢集安裝配置

原文連結    譯者:魏勇

本文詳細介紹了 Storm 叢集的安裝配置方法。如果需要在 AWS 上安裝 Storm,你應該先了解一下 storm-deploy 專案。storm-deploy 可以自動完成 E2 上 Storm 叢集的準備、配置、安裝的全部過程,同時還設定好了 Ganglia,方便監控 CPU、磁碟以及網路的使用資訊。

如果你在使用 Storm 叢集時遇到問題,請先檢視“問題與解決”一文中是否已有相應的解決方案。如果檢索不到有效的解決方法,請向社群的郵件列表傳送關於問題的郵件。

以下是安裝 Storm 的步驟:

  1. 安裝 ZooKeeper 叢集;
  2. 在各個機器上安裝執行叢集所需要的依賴元件;
  3. 下載 Storm 安裝程式並解壓縮到叢集的各個機器上;
  4. 在 storm.yaml 中新增叢集配置資訊;
  5. 使用 “storm” 指令碼啟動各機器後臺程序。

安裝 ZooKeeper 叢集

Storm 使用 ZooKeeper 來保證叢集的一致性。叢集中 ZooKeeper 並不是用來進行訊息傳遞的,所以 Storm 對 ZooKeeper 的負載相當低。雖然在大部分場景下單點 ZooKeeper 也勉強夠用,但是如果你需要更可靠的 HA 機制或者需要部署大規模 Storm 叢集,你最好配置一個 ZooKeeper 叢集。ZooKeeper 叢集的部署說明請參考此文

關於 ZooKeeper 部署的幾點說明:

  1. ZooKeeper 必須在監控模式下執行。因為 ZooKeeper 是個快速失敗系統,如果遇到了故障,ZooKeeper 服務會主動關閉。更多詳細資訊請參考此文
  2. 需要設定一個 cron 服務來定時壓縮 ZooKeeper 的資料與事務日誌。因為 ZooKeeper 的後臺程序不會處理這個問題,如果不配置 cron,ZooKeeper 的日誌會很快填滿磁碟空間。更多詳細資訊請參考此文

安裝必要的依賴元件

接下來你需要在叢集中的所有機器上安裝必要的依賴元件,包括:

  1. Java 6(推薦使用 JDK 7 以上版本 —— 譯者注)
  2. 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_CLASSPATHSTORM_EXT_CLASSPATH_DAEMON 兩個環境變數來配置普通外部庫與“僅用於後臺程序”外部庫的 classpath。

使用 “storm” 指令碼啟動後臺程序

最後一步是啟動所有的 Storm 後臺程序。注意,這些程序必須在嚴格監控下執行。因為 Storm 是個與 ZooKeeper 相似的快速失敗系統,其程序很容易被各種異常錯誤終止。之所以設計成這種模式,是為了確保 Storm 程序可以在任何時刻安全地停止並且在程序重新啟動之後恢復征程。這也是 Storm 不在處理過程中儲存任何狀態的原因 —— 在這種情況下,如果有 Nimbus 或者 Supervisor 重新啟動,執行中的拓撲不會受到任何影響。下面是啟動後臺程序的方法:

  1. Nimbus:在 master 機器上,在監控下執行 bin/storm nimbus 命令。
  2. Supervisor:在每個工作節點上,在監控下執行 bin/storm supervisor 命令。Supervisor 的後臺程序主要負責啟動/停止該機器上的 worker 程序。
  3. UI:在 master 機器上,在監控下執行 bin/storm ui 命令啟動 Storm UI(Storm UI 是一個可以在瀏覽器中方便地監控叢集與拓撲執行狀況的站點)後臺程序。可以通過 http://{nimbus.host}:8080 來訪問 UI 站點。

可以看出,啟動後臺程序非常簡單。同時,各個後臺程序也會將日誌資訊記錄到 Storm 安裝程式的 logs/ 目錄中(這是 Storm 的預設設定,日誌檔案的路徑與相關配置資訊可以在 {STORM_HOME}/logback/cluster.xml 檔案中修改 —— 譯者注)。