大資料晉級之路(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