storm技術(shù)的引入
對于一些要求進(jìn)行實(shí)時(shí)數(shù)據(jù)分析的,并以秒級(jí)、甚至毫秒級(jí)就要反饋結(jié)果的場景(交通部門監(jiān)控超速車輛、互聯(lián)網(wǎng)監(jiān)測網(wǎng)絡(luò)攻擊等)。這時(shí)候Hadoop的mapreduce計(jì)算框架已經(jīng)不能滿足需求,這個(gè)時(shí)候就需要使用實(shí)時(shí)計(jì)算框架Storm或Spark Streaming。
實(shí)時(shí)數(shù)據(jù)處理的兩種形式
- Continuous Streaming 持續(xù)流式計(jì)算:單獨(dú)處理每條記錄,并在記錄出現(xiàn)時(shí)立即處理。Storm采用這種計(jì)算模式
- 微批量計(jì)算:將多個(gè)記錄組合(可以按照記錄的數(shù)量或者時(shí)間分割出來)為一個(gè)單位,然后進(jìn)行計(jì)算處理。Spark Streaming計(jì)算框架采用這種模式。
storm的幾個(gè)重要特性
- 是開源的分布式實(shí)時(shí)計(jì)算系統(tǒng)
- 編程模型簡單,可以支持多種編程語言
- 低延遲,可以達(dá)到秒級(jí)。
- 易擴(kuò)展(增加計(jì)算節(jié)點(diǎn)),有容錯(cuò)機(jī)制。
storm架構(gòu)體系
-
整體架構(gòu)圖
Image.png - 各組件功能和特性
- Nimbus:
- 作為主節(jié)點(diǎn),本身是無狀態(tài)的,狀態(tài)信息是由zookeeper存儲(chǔ)(實(shí)現(xiàn)了高可用,當(dāng)nimbus掛掉,可以找另外一個(gè)節(jié)點(diǎn)啟動(dòng)nimbus進(jìn)程,狀態(tài)信息從zookeeper獲得)。
- 在nimbus進(jìn)程失敗后,可以快速重啟恢復(fù)正常工作,不需要很長的時(shí)間來進(jìn)行初始化和狀態(tài)恢復(fù)。
- 接受客戶端任務(wù)Topology的提交,然后把代碼發(fā)布到zookeeper上,由supervisor到zookeeper上領(lǐng)取任務(wù)。
- 當(dāng)nimbus從zookeeper得知有supervisor節(jié)點(diǎn)掛掉,可以將該節(jié)點(diǎn)的任務(wù)重新分配給其他子節(jié)點(diǎn)。
- Supervisor
- 作為從節(jié)點(diǎn)
- 從zookeeper上獲取nimbus分配的任務(wù),負(fù)責(zé)啟動(dòng)和停止worker工作進(jìn)程
- 自己的狀態(tài)信息匯報(bào)到zookeeper上,然后由nimbus監(jiān)控
- worker:負(fù)責(zé)啟動(dòng)和停止executor線程
- executor:真正執(zhí)行任務(wù)task的線程。
-
zookeeper:存儲(chǔ)nimbus和supervisor的狀態(tài)信息,這樣使storm集群保持無狀態(tài),具有高可用性。
Image.png - logviewer:負(fù)責(zé)storm集群中日志收集的進(jìn)程,需要在每個(gè)supervisor節(jié)點(diǎn)上啟動(dòng)
Storm的安裝部署
- 將安裝包解壓到指定目錄
$ tar zxvf apache-storm-0.9.6.tar.gz -C /opt/modules/
Image.png -
在./conf/storm_env.ini中配置JAVA_HOME
Image.png -
對./conf/storm.yaml進(jìn)行配置(格式一定要注意,不要用tab)
storm.zookeeper.servers:指定zookeeper集群節(jié)點(diǎn)
nimbus.host:指定nimbus節(jié)點(diǎn)
storm.local.dir:這個(gè)指定的本地系統(tǒng)的地址用來保存任務(wù)提交的jar包
supervisor.slots.ports:指定supervisor啟動(dòng)的工作進(jìn)程work的默認(rèn)端口號(hào),若超過指定的個(gè)數(shù),將隨機(jī)分配
Image.png - 啟動(dòng)zookeeper(提前安裝部署成功),然后啟動(dòng)主節(jié)點(diǎn)nimbus和從節(jié)點(diǎn)supervisor以及l(fā)ogviewer。在剛啟用主節(jié)點(diǎn)、從節(jié)點(diǎn)、logviewer的時(shí)候,用jps查看,進(jìn)程名會(huì)顯示config_value,這是因?yàn)檫@時(shí)正在加載配置文件。
$ bin/zkServer.sh start
$ nohup bin/storm nimbus >/dev/null 2>&1 &
$ nohup bin/storm supervisor >/dev/null 2>&1 &
$ nohup bin/storm logviewer>/dev/null 2>&1 &
所有進(jìn)程啟動(dòng)成功后用jps查看
Paste_Image.png - 啟動(dòng)ui進(jìn)程
$ nohup bin/storm ui >/dev/null 2>&1 &
Paste_Image.png
Paste_Image.png - 測試運(yùn)行自帶的單詞統(tǒng)計(jì)示例(注意:任務(wù)會(huì)一直運(yùn)行)
$ bin/storm jar examples/storm-starter/storm-starter-topologies-0.9.6.jar storm.starter.WordCountTopology wordcount

Paste_Image.png

Paste_Image.png







