本次實(shí)驗(yàn)我們將了解學(xué)習(xí)有關(guān)Storm的一些知識(shí)以及如何在虛擬機(jī)集群中進(jìn)行部署。
二、實(shí)驗(yàn)?zāi)康?ol>Storm簡(jiǎn)介:Storm是一個(gè)分布式的、高容錯(cuò)的基于數(shù)據(jù)流的實(shí)時(shí)處理系統(tǒng),可以簡(jiǎn)單、可靠的處理大量的數(shù)據(jù)流。Storm支持水平擴(kuò)展,具有高容錯(cuò)性,保證每個(gè)消息都會(huì)得到處理,而且處理速度很快(在一個(gè)小集群中,每個(gè)結(jié)點(diǎn)每秒可以處理數(shù)以百萬(wàn)計(jì)的消息),它有以下特點(diǎn):編程模型簡(jiǎn)單、可擴(kuò)展、高可靠性、高容錯(cuò)性、支持多種編程語(yǔ)言、支持本地模式、高效。Storm有很多使用場(chǎng)景:如實(shí)時(shí)分析,在線機(jī)器學(xué)習(xí),持續(xù)計(jì)算,分布式RPC,ETL等等。
體系架構(gòu):Storm共有兩層體系結(jié)構(gòu),第一層采用master/slave架構(gòu),第二層為DAG流式處理器,第一層資源管理器主要負(fù)責(zé)管理集群資源、響應(yīng)和調(diào)度用戶任務(wù),第二層流式處理器則實(shí)際執(zhí)行用戶任務(wù)
集群資源管理層:Storm的集群資源管理器采用master/slave架構(gòu),主節(jié)點(diǎn)即控制節(jié)點(diǎn)(master node)和從節(jié)點(diǎn)即工作節(jié)點(diǎn)(worker node)??刂乒?jié)點(diǎn)上面運(yùn)行一個(gè)叫Nimbus后臺(tái)服務(wù)程序,它的作用類似Hadoop里面的JobTracker, Nimbus負(fù)責(zé)在集群里面分發(fā)代碼,分配計(jì)算任務(wù)給機(jī)器,并且監(jiān)控狀態(tài)。每一個(gè)工作節(jié)點(diǎn)上面運(yùn)行一個(gè)叫做Supervisor的服務(wù)程序。Supervisor會(huì)監(jiān)聽分配給它那臺(tái)機(jī)器的工作,根據(jù)需要啟動(dòng)/關(guān)閉工作進(jìn)程worker。每一個(gè)工作進(jìn)程執(zhí)行一個(gè)topology的一個(gè)子集;一個(gè)運(yùn)行的topology由運(yùn)行在很多機(jī)器上的很多工作進(jìn)程worker組成。(一個(gè)supervisor里面有多個(gè)worker,一個(gè)worker是一個(gè)JVM??梢耘渲脀orker的數(shù)量,對(duì)應(yīng)的是conf/storm.yaml中的supervisor.slot的數(shù)量),架構(gòu)圖如下圖所示:
稱集群信息(Nimbus協(xié)議、Supervisor節(jié)點(diǎn)位置) 、任務(wù)分配信息等關(guān)鍵數(shù)據(jù)為元數(shù)據(jù)。Storm使用ZooKeeper集群來(lái)共享元數(shù)據(jù),這些元數(shù)據(jù)對(duì)Storm非常重要,比如Nimbus通過(guò)這些元數(shù)據(jù)感知Supervisor節(jié)點(diǎn),Supervisor通過(guò)Zookeeper集群感知任務(wù)分配情況。Nimbus和Supervisor之間的所有協(xié)調(diào)工作都是通過(guò)Zookeeper集群完成。另外,Nimbus進(jìn)程和Supervisor進(jìn)程都是快速失敗(fail-fast)和無(wú)狀態(tài)的?所有的狀態(tài)要么在zookeeper里面, 要么在本地磁盤上。這也就意味著你可以用kill -9來(lái)殺死Nimbus和Supervisor進(jìn)程,然后再重啟它們,就好像什么都沒(méi)有發(fā)生過(guò),這個(gè)設(shè)計(jì)使得Storm異常的穩(wěn)定。
數(shù)據(jù)模型:Storm實(shí)現(xiàn)了一種數(shù)據(jù)流模型,其中數(shù)據(jù)持續(xù)地流經(jīng)一個(gè)轉(zhuǎn)換實(shí)體網(wǎng)絡(luò)。一個(gè)數(shù)據(jù)流的抽象稱為一個(gè)流(stream),這是一個(gè)無(wú)限的元組序列。元組(tuple)就像一種使用一些附加的序列化代碼來(lái)表示標(biāo)準(zhǔn)數(shù)據(jù)類型(比如整數(shù)、浮點(diǎn)和字節(jié)數(shù)組)或用戶定義類型的結(jié)構(gòu)。每個(gè)流由一個(gè)唯一ID定義,這個(gè)ID可用于構(gòu)建數(shù)據(jù)源和接收器(sink)的拓?fù)浣Y(jié)構(gòu)。流起源于噴嘴(spout),Spout將數(shù)據(jù)從外部來(lái)源流入 Storm 拓?fù)浣Y(jié)構(gòu)中。接收器(或提供轉(zhuǎn)換的實(shí)體)稱為螺栓(bolt)。螺栓實(shí)現(xiàn)了一個(gè)流上的單一轉(zhuǎn)換和一個(gè) Storm 拓?fù)浣Y(jié)構(gòu)中的所有處理。Bolt既可實(shí)現(xiàn) MapReduce之類的傳統(tǒng)功能,也可實(shí)現(xiàn)更復(fù)雜的操作(單步功能),比如過(guò)濾、聚合或與數(shù)據(jù)庫(kù)等外部實(shí)體通信。典型的 Storm 拓?fù)浣Y(jié)構(gòu)會(huì)實(shí)現(xiàn)多個(gè)轉(zhuǎn)換,因此需要多個(gè)具有獨(dú)立元組流的Bolt。Bolt和Spout都實(shí)現(xiàn)為L(zhǎng)inux系統(tǒng)中的一個(gè)或多個(gè)任務(wù)。
五、實(shí)驗(yàn)步驟 1、配置SSH免密登錄首先配置master,slave1和slave2之間的免密登錄和各虛擬機(jī)的/etc/hosts文件,這個(gè)步驟請(qǐng)參考我之前的一篇博客,里面有詳細(xì)過(guò)程:
大數(shù)據(jù)技術(shù)基礎(chǔ)實(shí)驗(yàn)一:配置SSH免密登錄
2、安裝ZooKeeper集群配置完免密登錄之后我們還需要安裝Zookeeper集群,這個(gè)步驟可以參考我之前的博客,里面有詳細(xì)的步驟:大數(shù)據(jù)技術(shù)基礎(chǔ)實(shí)驗(yàn)五:Zookeeper實(shí)驗(yàn)——部署ZooKeeper
在這里我就不再贅述了。
3、部署Storm首先我們將Storm 安裝包解壓到/usr/cstor目錄,并將Storm解壓目錄所屬用戶改成root:root:
tar -zxvf apache-storm-0.10.0.tar.gz -c /usr/cstor
mv /usr/cstor/apache-storm-0.10.0 /usr/cstor/storm
chown -R root:root /usr/cstor/storm
學(xué)校的虛擬機(jī)上已經(jīng)提前幫我們解壓好了,所以這一步就不用我們?nèi)ネ瓿闪?,知道如何操作就行?/p>
然后我們進(jìn)入解壓目錄下,把conf目錄下的storm.yaml修改和添加配置項(xiàng)目(每個(gè)配置項(xiàng)前面必須留有空格,否則會(huì)無(wú)法識(shí)別),如下:
cd /usr/cstor/storm/conf
vim storm.yaml
Storm集群使用的Zookeeper集群地址,其格式如下:
storm.zookeeper.servers:
- "slave1"
- "slave2"
- "master"
然后我們?cè)诒镜貏?chuàng)建一個(gè)workdir目錄用于作為存儲(chǔ)目錄:
mkdir -p /usr/cstor/storm/workdir
創(chuàng)建完之后我們?cè)俅位氐絼偛诺膕torm.yaml文件中進(jìn)行后續(xù)配置:
cd /usr/cstor/storm/conf
vim storm.yaml
本地存儲(chǔ)目錄,也就是我們剛剛創(chuàng)建的目錄:
storm.local.dir: "/usr/cstor/storm/workdir"
Storm集群Nimbus機(jī)器地址:
nimbus.host: "master"
對(duì)于每個(gè)Supervisor工作節(jié)點(diǎn),需要配置該工作節(jié)點(diǎn)可以運(yùn)行的worker數(shù)量。每個(gè)worker占用一個(gè)單獨(dú)的端口用于接收消息,該配置選項(xiàng)即用于定義哪些端口是可被worker使用的。默認(rèn)情況下,每個(gè)節(jié)點(diǎn)上可運(yùn)行4個(gè)workers,分別在6700、6701、6702和6703端口,如:
supervisor.slots.ports:
- 6700
- 6701
- 6702
- 6703
UI端口(web端口,默認(rèn)8080):
ui.port: 8081
配置成如上即可。
配置完成之后我們將/usr/cstor/storm目錄傳到另外三個(gè)節(jié)點(diǎn)上:
scp -r /usr/cstor/storm root@slave1:/usr/cstor
scp -r /usr/cstor/storm root@slave2:/usr/cstor
然后,啟動(dòng)Storm集群(保證Zookeeper在此之前已啟動(dòng)),啟動(dòng)步驟如下:
主節(jié)點(diǎn)(master)啟動(dòng)nimbus服務(wù):
cd /usr/cstor/storm/bin
nohup ./storm nimbus >/dev/null 2>&1 &
從slave節(jié)點(diǎn)(2個(gè))啟動(dòng)supervisor服務(wù):
cd /usr/cstor/storm/bin
nohup ./storm supervisor >/dev/null 2>&1 &
主節(jié)點(diǎn)(master)啟動(dòng)ui服務(wù):
nohup ./storm ui >/dev/null 2>&1 &
最后我們使用jps分別在三臺(tái)虛擬機(jī)上查看java進(jìn)程看我們是否啟動(dòng)成功:
master:
slave1和slave2:
分別出現(xiàn)如上進(jìn)程就說(shuō)明我們成功啟動(dòng)storm。
啟動(dòng)好Storm集群后??梢酝ㄟ^(guò)瀏覽量訪問(wèn)Storm WEB頁(yè)面(http://10.30.160.10:8081 ),查看Storm集群的一些基本情況:
六、最后我想說(shuō)到這里本次部署Storm實(shí)驗(yàn)就結(jié)束了,后面有時(shí)間我會(huì)繼續(xù)更新的,這學(xué)期也快結(jié)束了,也要開始期末復(fù)習(xí)了。
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧