Storm是開源的一個分散式實時計算系統,用於資料的實時分析,持續計算,分散式RPC、線上機器學習、ETL等。例如,在電商購物網站購買商品時,會在網頁旁邊或者底端看到與自己所需要商品相關的系列商品,這就是使用類似Storm實時計算去做的。Hadoop適用於海量資料的離線資料分析,無法做到實時分析計算。

Storm系統的設計保證了訊息能得到快速的處理,使用ZeroMQ作為其底層訊息佇列。Storm有一個"本地模式",可以在處理過程中完全模擬Storm叢集,可以使我們快速進行開發和單元測試。Storm支援水平擴充套件,具有高容錯性,保證每個訊息都會得到處理,而且處理速度很快,在一個小叢集中,,每個結點每秒可以處理數以百萬計的訊息。Storm的部署和運維都很便捷,可以使用任意程式語言來開發應用。

下圖為Hadoop和Storm的簡單對比

Storm的架構結構圖


Nimbus主節點:通常執行一個後臺程式Nimbus,用於響應分佈在叢集中的節點,分配任務和監測故障,類似於Hadoop中的Job Tracker。

Supervisor工作節點:執行一個後臺程式Supervisor,接收Nimbus分配的任務,管理屬於自己的worker程序。每個工作節點都是topology中一個子集的實現。而Nimbus和Supervisor之間的協調則通過Zookeeper系統或者叢集。

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

Topology:Storm中執行的一個實時應用程式,因為各個元件間的訊息流動形成邏輯上的一個拓撲結構。一個topology是spouts和bolts組成的圖,通過stream groupings將圖中的spouts和bolts連線起來。


Storm所使用的容器是jetty,底層通訊使用netty,zookeeper使用的是Curator。

Storm環境搭建

Zookeeper叢集包括3臺機器:192.168.0.217、192.168.0.218、192.168.0.219

3臺Storm機器IP:192.168.0.222、192.168.0.223、192.168.0.224,關閉防火牆,並修改/etc/hosts配置,安裝JDK1.8並配置環境變數


修改/etc/hosts配置

vim /etc/hosts


配置環境變數

vim /etc/profile

新增

export JAVA_HOME=/usr/local/localsoftware/jdk1.8.0_121

export PATH=$JAVA_HOME/bin

export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

執行source /etc/profile 使環境變數立即生效

安裝python

下載3.6.4版本


下載Python-3.6.4.tgz,並分別上傳到192.168.0.222、192.168.0.223、192.168.0.224


執行下面指令解壓Python

tar -zxvf Python-3.6.4.tgz


cd Python-3.6.4

./configure --prefix=/usr/local/Python-3.6.4

make

sudo make install

Storm安裝

下載Storm安裝包,並分別上傳到192.168.0.222、192.168.0.223、192.168.0.224


解壓    

tar -zxvf apache-storm-1.2.1.tar.gz  -C  /usr/local/

配置Storm的環境變數

vim /etc/profile

新增

export STORM_HOME=/usr/local/apache-storm-1.2.1

修改

export PATH=$JAVA_HOME/bin:$STORM_HOME/bin:$PATH

執行指令使環境變數立即生效   source  /etc/profile 

修改Storm的conf目錄下的配置檔案storm.yaml

vim storm.yaml

配置Storm叢集使用的Zookeeper服務


注意上圖中箭頭位置的空格,不要去掉,否則可能會導致Storm無法正常啟動


建立data資料夾

mkdir  /usr/local/apache-storm-1.2.1/data

啟動Storm叢集

首先,啟動Zookeeper叢集

cd /usr/local/zookeeper




其次,啟動Storm叢集

主機器192.168.0.222     從機器:192.168.0.223、192.168.0.224

主機器(nimbus):  storm nimbus  &

從機器(supervisor):    storm supervisor  &

主機器ui執行:  storm  ui  &

主機器logviewer執行:    storm  logviewer  &





檢視啟動日誌資訊

192.168.0.222    nimbus


192.168.0.223   supervisor


檢視192.168.0.222  nimbus中的ui.log

vim ui.log


從上圖可以看出,Storm的管控臺ui使用的Server為jetty

在瀏覽器中訪問http://192.168.0.222:18080/  ,可以檢視storm的一些叢集配置