Kafka實戰-Storm Cluster

1.概述

  在《Kafka實戰-實時日誌統計流程》一文中,談到了Storm的相關問題,在完成實時日誌統計時,咱們須要用到Storm去消費Kafka Cluster中的數據,因此,這裏我單獨給你們分享一篇Storm Cluster的搭建部署。如下是今天的分享目錄:html

  • Storm簡述
  • 基礎軟件
  • 安裝部署
  • 效果預覽

  下面開始今天的內容分享。apache

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安裝包  《 下載地址
  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.結束語

  這篇博客就和你們分享到這裏,若是你們在研究學習的過程中有什麼問題,能夠加羣進行討論或發送郵件給我,我會盡我所能爲您解答,與君共勉!oop

相關文章
相關標籤/搜索