storm筆記:storm集群

Strom集群結(jié)構(gòu)是有一個(gè)主節(jié)點(diǎn)(nimbus)和多個(gè)工作節(jié)點(diǎn)(supervisor)組成的主從結(jié)構(gòu),主節(jié)點(diǎn)通過(guò)配置靜態(tài)指定(還有一種主從結(jié)構(gòu)是在運(yùn)行時(shí)動(dòng)態(tài)選舉,比如zookeeper)。通常這種主從結(jié)構(gòu)存在出現(xiàn)單點(diǎn)故障的風(fēng)險(xiǎn),Storm通過(guò)特殊處理規(guī)避這種風(fēng)險(xiǎn),后面將解釋Storm的半容錯(cuò)結(jié)構(gòu)。

nimbus與supervisor都是Storm提供的后臺(tái)守護(hù)進(jìn)程,之間的通信是結(jié)合Zookeeper的狀態(tài)變更通知和監(jiān)控通知來(lái)處理。如下圖所示:

storm cluster

Storm對(duì)Zookeeper的使用相對(duì)比較輕量,不會(huì)造成很重的資源負(fù)擔(dān)。單節(jié)點(diǎn)的Zookeeper集群能夠滿足大部分的需求,但是如果部署大型Storm集群,為了Storm的穩(wěn)定性,就需要相對(duì)大點(diǎn)的Zookeeper集群。

nimbus

nimbus進(jìn)程的主要職責(zé)是管理、協(xié)調(diào)和監(jiān)控集群上運(yùn)行的topology(包括topology的發(fā)布、任務(wù)指派、時(shí)間處理時(shí)重新指派任務(wù)等)。

topology的發(fā)布,需要將預(yù)先打成jar的topology和配置信息提交到nimbus服務(wù)器,當(dāng)nimbus接收到topology壓縮包,會(huì)將jar包分發(fā)到足夠數(shù)量的supervisor節(jié)點(diǎn)上。當(dāng)supervisor節(jié)點(diǎn)接收到topology壓縮文件,nimbus就會(huì)指派task(bolt、spout實(shí)例)到每個(gè)supervisor并且發(fā)送信號(hào)指示supervisor生成足夠的worker來(lái)執(zhí)行指定task。

nimbus通過(guò)Zookeeper記錄所有supervisor節(jié)點(diǎn)的狀態(tài)和分配給它們的task。如果nimbus發(fā)現(xiàn)某個(gè)supervisor沒(méi)有上報(bào)心跳或已經(jīng)不可達(dá),它將會(huì)把分配給故障supervisor的task重新分配給其他節(jié)點(diǎn)。

嚴(yán)格來(lái)講,nimbus不會(huì)出現(xiàn)單點(diǎn)故障。這個(gè)特性是因?yàn)閚imbus進(jìn)程不參與topology(拓?fù)洌┑臄?shù)據(jù)處理過(guò)程,僅僅是管理topology的初始化、任務(wù)分發(fā)和進(jìn)行監(jiān)控,所以如果nimbus在topology運(yùn)行時(shí)停止,不會(huì)影響topology的運(yùn)行。

supervisor

supervisor進(jìn)程等待nimbus分配任務(wù)后生成并監(jiān)控worker(jvm進(jìn)程)執(zhí)行任務(wù)。supervisor與worker運(yùn)行在不同的jvm上,如果由supervisor啟動(dòng)的某個(gè)worker因?yàn)殄e(cuò)誤異常退出(或被kill掉),supervisor會(huì)嘗試重新生成新的worker進(jìn)程。

ui

ui進(jìn)程是為Stom集群提供一個(gè)web的gui監(jiān)控界面,對(duì)正在運(yùn)行的nimbus、supervisor、topology進(jìn)行展示,對(duì)正在運(yùn)行的topology有一定管理功能,提供其統(tǒng)計(jì)信息,對(duì)監(jiān)控Storm集群的運(yùn)轉(zhuǎn)和topology的功能有很大的幫助。ui進(jìn)程屬于Storm的可選服務(wù),可以自由選擇啟動(dòng)或不啟動(dòng)。

集群部署

Strom的集群部署非常簡(jiǎn)單,而且nimbus、supervisor、zookeeper可以部署在同一臺(tái)機(jī)器上,實(shí)現(xiàn)簡(jiǎn)單的偽分布式模式,其部署過(guò)程分為下面幾步:

  1. 部署Zookeeper集群
  2. 在nimbus、supervisor節(jié)點(diǎn)上安裝依賴(lài)
  3. 下載定解壓storm的執(zhí)行包到nimbus、supervisor機(jī)器上(使用直接使用tar命令進(jìn)行解壓即可)
  4. 在storm.yaml配置必填項(xiàng)
  5. 通過(guò)storm命令啟動(dòng)進(jìn)程

Zookeeper集群

關(guān)于Zookeeper集群的部署,可以查看ZooKeeper安裝部署A Guide to Deployment and Administration

安裝依賴(lài)

在nimbus、supervisor所在的機(jī)器上安裝依賴(lài),主要包括java和python,當(dāng)前版本java最低使用jdk6,因?yàn)閜ython2和3版本不兼容,官方推薦使用Python2.6.6。

下載解壓

wget或culr直接從這里下載壓縮包,通過(guò)tar命令解壓即可。

配置storm.yaml

Storm需要配置的文件是conf/storm.yaml,其默認(rèn)配置在這里,storm.yaml會(huì)覆蓋defaults.yaml中的配置。

  1. storm.zookeeper.servers:Zookeeper集群的host列表,如下:
storm.zookeeper.servers:
  - "111.222.333.444"
  - "555.666.777.888"
  1. storm.zookeeper.port:如果Zookeeper集群沒(méi)有是用默認(rèn)的端口號(hào)8080,使用storm.zookeeper.port修改配置,比如:storm.zookeeper.port: 9999。
  2. storm.local.dir:nimbus與supervisor守護(hù)進(jìn)程需要一個(gè)文件夾來(lái)存儲(chǔ)少量的狀態(tài)數(shù)據(jù)(比如jar包、配置等)。該配置決定了nimbus和supervisor將信息存儲(chǔ)在哪。該目錄必須存在,且對(duì)當(dāng)前用戶(hù)有適當(dāng)?shù)牟僮鳈?quán)限,這個(gè)目錄的內(nèi)容必須在集群運(yùn)行的過(guò)程中一直存在,所以避免在/tmp目錄下創(chuàng)建。比如:
storm.local.dir: "/mnt/storm"
  1. nimbus.host:集群中的nimubs節(jié)點(diǎn)位置,worker需要知道從哪里下載topology的jar包和配置信息,比如:
nimbus.host: "111.222.333.444"
  1. supervisor.slots.ports:配置supervisor節(jié)點(diǎn)上每個(gè)worker使用的監(jiān)聽(tīng)端口,每個(gè)worker使用單獨(dú)的監(jiān)聽(tīng)端口,這樣,端口個(gè)數(shù)就限制了worker數(shù)量。默認(rèn)有4個(gè)worker,對(duì)應(yīng)端口是6700\6701\6702\6703,比如:
supervisor.slots.ports:
    - 6700
    - 6701
    - 6702
    - 6703

另外,storm集群還有一些可選配置,可以根據(jù)需要重新配置。storm的所有配置都可以通過(guò)前綴區(qū)分作用域,如下表所示:

前綴 分類(lèi)
storm.* 通用配置
nimbus.* Nimbus配置
supervisor.* Supervisor配置
topology.* Topology配置
ui.* Storm UI配置
worker.* Worker配置
zmq.* Zero MQ配置
drpc.* DRPC服務(wù)配置

啟動(dòng)

最后是啟動(dòng)Storm守護(hù)進(jìn)程,關(guān)鍵是需要在監(jiān)控(supervison)下啟動(dòng)每個(gè)進(jìn)程。因?yàn)镾torm是快速失敗的模式,也就是說(shuō),進(jìn)程遇到任何意外情況,都會(huì)立即停止。Storm被設(shè)計(jì)成能夠安全退成、快速回復(fù)的無(wú)狀態(tài)進(jìn)程。如果nimbus或supervisor重啟了,不會(huì)對(duì)運(yùn)行中的topology產(chǎn)生任何影響。

可執(zhí)行程序

Storm提供了多用途的命令行程序,可以用來(lái)啟動(dòng)守護(hù)進(jìn)程、執(zhí)行topology管理等操作,基礎(chǔ)命令格式為:storm [command] [arguments]...。

守護(hù)進(jìn)程命令

  1. nimbus:./bin/storm nimbus,啟動(dòng)nimbus守護(hù)進(jìn)程;
  2. supervisor:./bin/storm supervisor,啟動(dòng)supervisor守護(hù)進(jìn)程;
  3. ui:./bin/storm ui,默認(rèn)端口是8080,可以通過(guò)瀏覽器訪問(wèn)。

管理命令

Storm的管理命令用來(lái)發(fā)布和管理集群的topology,通常需要在Storm集群外的工作站執(zhí)行,管理命令從~/.storm/storm.yaml文件中查找nimbus主機(jī)名,比如:

nimbus.host: "nimbus"
  1. jar:storm jar topology_jar topology_class [arguments...],用來(lái)向Storm提交topology,會(huì)上傳topology_jar文件到nimbus并分發(fā)到整個(gè)集群,使用指定topology_class中的main方法。提交完成后,Storm會(huì)激活并開(kāi)始運(yùn)行topology。main方法中需要有StormSubmitter.submitTopology方法,并需要有一個(gè)唯一的topology名,如果集群中有同名的topology,jar命令會(huì)執(zhí)行失敗。
  2. kill:storm kill topology_name [-w wait_time],用來(lái)關(guān)閉已經(jīng)部署的topology。該命令通過(guò)topology_name來(lái)關(guān)閉topology,Storm會(huì)在topology.message.timeout.secs定義的時(shí)間或-m參數(shù)定義的時(shí)間后,是topology的spout取消激活。然后停止worker進(jìn)程,并嘗試清理所有存儲(chǔ)的狀態(tài)信息。也可以在Storm UI上進(jìn)行操作。
  3. deactivate:storm deactivate topology_name,用來(lái)通知Storm停止特定的topology的spout發(fā)送tuple,可以在Storm UI上取消激活操作。
  4. active:storm activate topology_name,用來(lái)通知Storm重新回復(fù)指定的topology的spout發(fā)送tuple,可以在Storm UI上重新激活操作。
  5. rebalance:storm rebalance topology_name [-w wait_time] [-n worker_count] [-e component_name=executer_count],只是Storm在集群的worker之間重新平均分派任務(wù),不需要關(guān)閉或重新提交現(xiàn)有topology。還可以通過(guò)-n或-e參數(shù)修改topology分配的worker數(shù)及每個(gè)task分配的executor數(shù)。當(dāng)執(zhí)行rebalance命令時(shí),Storm會(huì)先取消激活topology,等待配置的時(shí)間是剩余的tuple完成處理,然后在supervisor節(jié)點(diǎn)中均勻分配worker。重新平衡后,Storm會(huì)將topology重新激活。比如:等待15秒,指定5個(gè)worker,指定sentece-spout使用4個(gè)executor、split-bolt使用8個(gè)eexecutor,命令為:storm rebalance wordcount-topology -w 15 -n 5 -e sentence-spout=4 -e split-bolt=8。
  6. remoteconfvalue:storm remoteconfvalue conf-name,用來(lái)查看集群中配置參數(shù)??梢钥吹秸麄€(gè)集群的公共配置,不能單獨(dú)查看topology中覆蓋的特殊配置。

個(gè)人主頁(yè): http://www.howardliu.cn

個(gè)人博文: storm筆記:storm集群

CSDN主頁(yè): http://blog.csdn.net/liuxinghao

CSDN博文: storm筆記:storm集群

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 目錄 場(chǎng)景假設(shè) 調(diào)優(yōu)步驟和方法 Storm 的部分特性 Storm 并行度 Storm 消息機(jī)制 Storm UI...
    mtide閱讀 17,280評(píng)論 30 60
  • 1. Storm介紹: Storm是實(shí)時(shí)流計(jì)算框架。企業(yè)中典型實(shí)時(shí)分析框架搭建模式: Flume + Kafka ...
    奉先閱讀 1,787評(píng)論 0 3
  • 這是一個(gè)JStorm使用教程,不包含環(huán)境搭建教程,直接在公司現(xiàn)有集群上跑任務(wù),關(guān)于JStorm集群環(huán)境搭建,后續(xù)研...
    Coselding閱讀 6,719評(píng)論 1 9
  • 古老的城墻承載了一份厚重的歷史,佇立城頭,穿過(guò)滄桑風(fēng)雨,仿佛可見(jiàn)的是一場(chǎng)又一場(chǎng)的硝煙滾滾,是金戈鐵馬、劍拔弩張,旌...
    小小的山閱讀 758評(píng)論 7 10
  • 有人說(shuō),最好的感情,都建立在無(wú)用的話語(yǔ)之上。 不愛(ài),廢話會(huì)越來(lái)越少。 若愛(ài),你會(huì)連尋常小事,都...
    做一個(gè)慢慢變富的人閱讀 344評(píng)論 0 3

友情鏈接更多精彩內(nèi)容