Storm 快速上手:概念、佈署與範例

Apache Storm 是基於 Hadoop的分散式串流運算框架,主打的就是 即時運算 ,Twitter、掏寶這些公司都使用 Storm進行數據分析。究竟他有何特別之處呢,就讓我們透過簡單的說明,架設環境來使用看看吧!

Storm 的架構

基於 Hadoop的架構而來,主要由 NimbusSupervisor 以及 ZooKeeper 這三個節點構成,下表說明他們的關係,懂過 Hadoop再來看會變得清楚許多。

Hadoop Storm Storm 說明
系統角色 JobTracker Nimbus 主節點,負責接收任務 Topology,並指派對應的 Spout/Bolt元件執行
TaskTracker Supervisor 每個 Worker都會有一個Supervisor,用來管理 Worker 開始或停止
ZooKeeper 負責協調 Nimbus與ZooKeeper,監控所有節點的狀態,確保節點都能正常運作
Child Worker
任務名稱 Job Topology 佈署完成後會持續運作,稱 Job比較像一次性任務,因此稱之為Topology
運作方式 Map-Reduce Spout-Bolt

在 Topology 之中,有兩個元件 Spout與 Bolt,透過 Tuple格式傳遞資料。Spout負責接收資料,比如接收 Twitter上的文字訊息,或是即時的股市資料 ,而 Bolt負責處理資料,可以自行定義每個 Bolt的任務以及資料處理的路徑,最後把結果輸出或存放到資料庫。如下方的架構圖,多個資料來源可以同時處理,也可以將資料分拆到不同的 Bolt。

Spout-bolt 架構。圖 / Storm

佈署 Storm 的方式

佈署 Hadoop相關應用已經不像以往土法煉鋼,要自己設定機器,擺上幾包 乖乖 以防不測。現在,雲端平台提供許多解決方案,能直接使用 Hadoop生態系服務,省去環境建設的麻煩。大致有這三種方式:

  • 使用雲端平台服務Amazon EMRAzure HDInsightGoogle Cloud Dataproc
  • 透過 Container 架設 :Kubernetes, Docker Swarm, Docker Compose
  • 從底層開始建置環境 :使用多台實體/虛擬機器,依照官方的安裝步驟完成架設

首選當然是使用雲端平台,Azure能直接架起來,網路上能找到 AWS的架設腳本,而 Cloud Dataproc似乎還沒有…

為了配合課程內容,這裡則是選擇使用 Kubernetes的官方範本在 Google Conatin Engine架設

使用 Kubernetes 架設 Storm

架設方式很容易,可以直接到 Kubernetes 官方 Github 拉 Example,不過這個範例中沒有加入 Storm UI,所以推薦用這個範本 k8s-storm ,裏頭已經寫好所有的 Script了。如果像我一樣在 Google Cloud上架設,記得給 nimbus 一個外部 IP,方便上傳 Job,修改方式如下

在 svc-storm-nimbus.yaml,加入 type: LoadBalancer

apiVersion: v1
kind: Service
metadata:
name: nimbus
spec:
ports:
- port: 6627
selector:
app: nimbus
type: LoadBalancer

執行 start-all.sh 就能跑起來了!用 kubectl get services 檢查一下服務是不是都開啟,IP有沒有成功設定

基本範例 ExclamationTopology

在執行前,先簡單說明 ExclamationTopology 這個範例,詳細的官方教學請看 這裡

這個範例就是在文字後面加驚嘆號,如下圖, Spout會從五個字裏頭隨機挑一個不斷發送文字,經過 Bolt後,在文字後方加入三個驚嘆號。整個流程是 Spout -> Bolt -> Bolt。

Spout與 Bolt的重要程式碼片段

透過 TopologyBuilder完成設定。後方的數值代表 thread的數量,物件則是透過 shuffleGrouping連接。

由於使用 kubernetes架設的 Storm (Storm1)沒法 SSH進 nimbus,於是我用 Docker compose 再建置一個 Storm環境 (Storm2),將裏頭的 ExclamationTopology 範例檔傳送到 Kubernetes上的 nimbus (Storm1)。

$ https://github.com/wurstmeister/storm-docker.git
$ cdstorm-docker
$ sudodocker-composeup –d
$ ./client.sh #Enter into nimbus server
# Make Example
$ apt-getinstallmaven
$ cd /opt/apache-storm-0.9.4/examples
$ mvninstall

透過 maven,starter 範例會被包成 jar檔,你會發現有 target目錄下有一包 storm-starter-topologies-0.9.4.jar。我們用以下指令提交任務給 Kubernetes上的 nimbus (Storm1)

$ cdtarget
$ stormjarstorm-starter-topologies-0.9.4.jar storm.starter.ExclamationTopology -c nimbus.host= -c nimbus.thrift.port=6627

透過 Storm UI看到剛剛上傳的 Topology 正常運作

這個是當初在 (Storm2) 執行 Topology的 Log

參考資料

傑瑞窩在這稿源:傑瑞窩在這 (源链) | 关于 | 阅读提示

本站遵循[CC BY-NC-SA 4.0]。如您有版权、意见投诉等问题,请通过eMail联系我们处理。
酷辣虫 » 后端存储 » Storm 快速上手:概念、佈署與範例

喜欢 (0)or分享给?

专业 x 专注 x 聚合 x 分享 CC BY-NC-SA 4.0

使用声明 | 英豪名录