Storm介紹及安裝部署


Storm是Twitter開源的分布式實時大數據處理框架,最早開源於github,從0.9.1版本之后,歸於Apache社區,被業界稱為實時版Hadoop。隨着越來越多的場景對Hadoop的MapReduce高延遲無法容忍,比如網站統計、推薦系統、預警系統、金融系統(高頻交易、股票)等等,大數據實時處理解決方案(流計算)的應用日趨廣泛,目前已是分布式技術領域最新爆發點,而Storm更是流計算技術中的佼佼者和主流。

 

storm核心組件

  • Nimbus:即Storm的Master,負責資源分配和任務調度。一個Storm集群只有一個Nimbus。
  • Supervisor:即Storm的Slave,負責接收Nimbus分配的任務,管理所有Worker,一個Supervisor節點中包含多個Worker進程。
  • Worker:工作進程,每個工作進程中都有多個Task。
  • Task:任務,在 Storm 集群中每個 Spout 和 Bolt 都由若干個任務(tasks)來執行。每個任務都與一個執行線程相對應。
  • Topology:計算拓撲,Storm 的拓撲是對實時計算應用邏輯的封裝,它的作用與 MapReduce 的任務(Job)很相似,區別在於 MapReduce 的一個 Job 在得到結果之后總會結束,而拓撲會一直在集群中運行,直到你手動去終止它。拓撲還可以理解成由一系列通過數據流(Stream Grouping)相互關聯的 Spout 和 Bolt 組成的的拓撲結構。
  • Stream:數據流(Streams)是 Storm 中最核心的抽象概念。一個數據流指的是在分布式環境中並行創建、處理的一組元組(tuple)的無界序列。數據流可以由一種能夠表述數據流中元組的域(fields)的模式來定義。
  • Spout:數據源(Spout)是拓撲中數據流的來源。一般 Spout 會從一個外部的數據源讀取元組然后將他們發送到拓撲中。根據需求的不同,Spout 既可以定義為可靠的數據源,也可以定義為不可靠的數據源。一個可靠的 Spout能夠在它發送的元組處理失敗時重新發送該元組,以確保所有的元組都能得到正確的處理;相對應的,不可靠的 Spout 就不會在元組發送之后對元組進行任何其他的處理。一個 Spout可以發送多個數據流。
  • Bolt:拓撲中所有的數據處理均是由 Bolt 完成的。通過數據過濾(filtering)、函數處理(functions)、聚合(aggregations)、聯結(joins)、數據庫交互等功能,Bolt 幾乎能夠完成任何一種數據處理需求。一個 Bolt 可以實現簡單的數據流轉換,而更復雜的數據流變換通常需要使用多個 Bolt 並通過多個步驟完成。
  • Stream grouping:為拓撲中的每個 Bolt 的確定輸入數據流是定義一個拓撲的重要環節。數據流分組定義了在 Bolt 的不同任務(tasks)中划分數據流的方式。在 Storm 中有八種內置的數據流分組方式。
  • Reliability:可靠性。Storm 可以通過拓撲來確保每個發送的元組都能得到正確處理。通過跟蹤由 Spout 發出的每個元組構成的元組樹可以確定元組是否已經完成處理。每個拓撲都有一個“消息延時”參數,如果 Storm 在延時時間內沒有檢測到元組是否處理完成,就會將該元組標記為處理失敗,並會在稍后重新發送該元組。

Storm程序在Storm集群中運行的示例圖如下:

一個Zookeeper集群負責Nimbus和多個Supervisor之間的所有協調工作(一個完整的拓撲可能被分為多個子拓撲並由多個supervisor完成)

此外,Nimbus后台程序和Supervisor后台程序都是快速失敗(fail-fast)和無狀態的;所有狀態維持在Zookeeper或本地磁盤。這意味着你可以kill -9殺掉nimbus進程和supervisor進程,然后重啟,它們將恢復狀態並繼續工作,就像什么也沒發生。這種設計使storm極其穩定。這種設計中Master並沒有直接和worker通信,而是借助一個中介Zookeeper,這樣一來可以分離master和worker的依賴,將狀態信息存放在zookeeper集群內以快速恢復任何失敗的一方

 

 部署storm

主機名 IP zookeeper 角色 版本
c1.heboan.com 192.168.48.128 Nimbus /UI apache-storm-1.2.3.tar.gz
c2.heboan.com 192.168.48.129 Supervisor   
c3.heboan.com 192.168.48.130 Supervisor  

Storm使用zookeeper來協調集群,zookeeper不用於消息傳遞,因此Sorm對zookeeper的負載非常低。對於大多數情況,單節點zookeeper集群應該足夠,但是如果要進行故障轉移或者部署大型Storm集群,則可需要部署更大的Zookeeper集群。

這里在上面主機上部署3個節點的zk集群,部署方法點擊我

 

下載Storm,並解壓到部署目錄

wget http://mirror.bit.edu.cn/apache/storm/apache-storm-1.2.3/apache-storm-1.2.3.tar.gz
tar xf apache-storm-1.2.3.tar.gz -C /opt/service/
cd /opt/service/
ln -s apache-storm-1.2.3 storm

配置storm.yaml

conf/storm.yaml是 storm配置文件,storm.yaml會覆蓋defaults.yaml中的任何內容

1)storm.zookeeper.servers:這是Storm集群的Zookeeper集群中的主機列表

storm.zookeeper.servers:
     - "c1.heboan.com"
     - "c2.heboan.com"
     - "c3.heboan.com"

2)storm.local.dir:Nimbus和Supervisor守護進程需要本地磁盤上的一個目錄來存儲少量狀態(如jar,confs和類似的東西), 如果該目錄不存在,會自動創建

storm.local.dir: "/opt/service/storm/status"

3) nimbus.seeds: 指定numbus主機

nimbus.seeds: ["c1.heboan.com"]

4)supervisor.slots.ports:對於每個工作者計算機,您可以使用此配置配置在該計算機上運行的工作程序數。每個工作人員使用單個端口接收消息,此設置定義哪些端口可以使用。如果您在此處定義了五個端口,那么Storm將分配最多五個工作人員在此計算機上運行。如果您定義了三個端口,Storm最多只能運行三個端口。默認情況下,此設置配置為在端口6700,6701,6702和6703上運行4個工作程序, 可以根據實際情況增加或減少,例如:

supervisor.slots.ports:
    - 6700
    - 6701
    - 6702
    - 6703

 5)配置web ui監聽的端口

ui.port: 8888

6)jvm配置, 根據實際情況進行配置

nimbus.childopts: "-Xmx4096m"

supervisor.childopts: "-Xmx4906m"

worker.childopts: "-Xmx8096m"

ui.childopts: "-Xmx1024m"

 配置完成了,把程序拷貝到其他兩個節點

scp -r storm 192.168.48.129:/opt/service/
scp -r storm 192.168.48.130:/opt/service/

 啟動集群

c1.heboan.com啟動Nimbus和ui

cd /opt/service/storm/bin
./storm nimbus >/dev/null 2>&1 &
./storm ui >/dev/null 2>&1 &

c2和c3啟動supervisor

cd /opt/service/storm/bin
./storm supervisor >/dev/null 2>&1 &

 

訪問ui:  http://192.168.48.128:8888

 

如果要啟動supervisor日志,則在supervisor節點執行

./storm logviewer >/dev/null 2>&1 &

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM