1. 程式人生 > >大資料晉級之路(7)Storm安裝及使用

大資料晉級之路(7)Storm安裝及使用

 

一、Apache Storm簡介

Apache Storm簡介

Storm是一個分散式的,可靠的,容錯的資料流處理系統。Storm叢集的輸入流由一個被稱作spout的元件管理,spout把資料傳遞給bolt, bolt要麼把資料儲存到某種儲存器,要麼把資料傳遞給其它的bolt。一個Storm叢集就是在一連串的bolt之間轉換spout傳過來的資料。

Storm元件

在Storm叢集中,有兩類節點:主節點master node和工作節點worker nodes。主節點執行Nimbus守護程序,這個守護程序負責在叢集中分發程式碼,為工作節點分配任務,並監控故障。Supervisor守護程序作為拓撲的一部分執行在工作節點上。一個Storm拓撲結構在不同的機器上執行著眾多的工作節點。每個工作節點都是topology中一個子集的實現。而Nimbus和Supervisor之間的協調則通過Zookeeper系統或者叢集。

Zookeeper

Zookeeper是完成Supervisor和Nimbus之間協調的服務。而應用程式實現實時的邏輯則被封裝進Storm中的“topology”。topology則是一組由Spouts(資料來源)和Bolts(資料操作)通過Stream Groupings進行連線的圖。

Spout

Spout從來源處讀取資料並放入topology。Spout分成可靠和不可靠兩種;當Storm接收失敗時,可靠的Spout會對tuple(元組,資料項組成的列表)進行重發;而不可靠的Spout不會考慮接收成功與否只發射一次。而Spout中最主要的方法就是nextTuple(),該方法會發射一個新的tuple到topology,如果沒有新tuple發射則會簡單的返回。

Bolt

Topology中所有的處理都由Bolt完成。Bolt從Spout中接收資料並進行處理,如果遇到複雜流的處理也可能將tuple傳送給另一個Bolt進行處理。而Bolt中最重要的方法是execute(),以新的tuple作為引數接收。不管是Spout還是Bolt,如果將tuple發射成多個流,這些流都可以通過declareStream()來宣告。

Stream Groupings

Stream Grouping定義了一個流在Bolt任務中如何被切分。

1. Shuffle grouping:隨機分發tuple到Bolt的任務,保證每個任務獲得相等數量的tuple。

2.Fields grouping:根據指定欄位分割資料流,並分組。例如,根據“user-id”欄位,相同“user-id”的元組總是分發到同一個任務,不同“user-id”的元組可能分發到不同的任務。

3. Partial Key grouping:根據指定欄位分割資料流,並分組。類似Fields grouping。

4.All grouping:tuple被複制到bolt的所有任務。這種型別需要謹慎使用。

5. Global grouping:全部流都分配到bolt的同一個任務。明確地說,是分配給ID最小的那個task。

6. None grouping:無需關心流是如何分組。目前,無分組等效於隨機分組。但最終,Storm將把無分組的Bolts放到Bolts或Spouts訂閱它們的同一執行緒去執行(如果可能)。

7. Direct grouping:這是一個特別的分組型別。元組生產者決定tuple由哪個元組處理者任務接收。

8. Local or shuffle grouping:如果目標bolt有一個或多個任務在同一工作程序,tuples 會打亂這些程序內的任務。否則,這就像一個正常的 Shuffle grouping。

二、Zookeeper叢集安裝

具體參見https://blog.csdn.net/u011095110/article/details/84145164

三、下載解壓storm

進入目標目錄我的是cd /hadoop,然後wget下載和解壓

wget http://mirrors.tuna.tsinghua.edu.cn/apache/storm/apache-storm-1.2.2/apache-storm-1.2.2.tar.gz 
tar -zxvf apache-storm-1.2.2.tar.gz

四、修改配置檔案

  • storm.yaml

配置zookeeper叢集地址,storm.local.dir和slot.ports,配置nimbus.seeds主節點地址:用於配置主控節點的地址,可以配置多個

cd /hadoop/apache-storm-1.2.2/conf
vim storm.yaml
storm.zookeeper.servers:
    - "master.hadoop"
    - "slave1.hadoop"
    - "slave2.hadoop"
storm.local.dir: "/data/hadoop/storm"
#     - "server2"
# 
# nimbus.seeds: ["host1", "host2", "host3"]
#
nimbus.seeds: ["master.hadoop"]
supervisor.slots.ports:
    - 6700
    - 6701
    - 6702
    - 6703
  • 拷貝將配置好的storm拷貝到兩個supervisor節點(slave1.hadoop和slave2.hadoop是我的兩個從節點hostname)
scp -r /hadoop/apache-storm-1.2.2 [email protected]:/hadoop/
scp -r /hadoop/apache-storm-1.2.2 [email protected]:/hadoop/
  • 對於兩臺supervisor node,我們額外開啟JMX支援,在配置檔案中加入如下配置:
supervisor.childopts: -verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=9998
  • 主從節點機器上配置環境變數
[[email protected] apache-storm-0.10.0]# vim /etc/profile
export STORM_HOME=/hadoop/apache-storm-1.2.2
export PATH=$STORM_HOME/bin:$PATH
[[email protected] apache-storm-0.10.0]# source /etc/profile
  • 建立storm.yaml裡設定的資料目錄

在3臺主機分別建立上面設定的資料目錄,必須都要建立:

mkdir -p /data/hadoop/storm

五、啟動主從節點storm

  • 主節點啟動nimubus和storm web ui
[[email protected] ~]# nohup storm ui > ui.out &
[[email protected] ~]# nohup storm nimbus > nimbus.out &
  • 從節點啟動supervisor
[[email protected]~]# nohup storm supervisor > supervisor.out &
[[email protected] ~]# nohup storm supervisor >supervisor.out &
  • 檢視storm ui