storm筆記:storm集群

Strom集群結(jié)構(gòu)是有一個(gè)主節(jié)點(diǎn)(nimbus)和多個(gè)工作節(jié)點(diǎn)(supervisor)組成的主從結(jié)構(gòu),主節(jié)點(diǎn)通過配置靜態(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ī)避這種風(fēng)險(xiǎn)朗伶,后面將解釋Storm的半容錯(cuò)結(jié)構(gòu)。

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

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來執(zhí)行指定task鱼响。

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

嚴(yán)格來講棺弊,nimbus不會(huì)出現(xiàn)單點(diǎn)故障模她。這個(gè)特性是因?yàn)閚imbus進(jìn)程不參與topology(拓?fù)洌┑臄?shù)據(jù)處理過程懂牧,僅僅是管理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)單的偽分布式模式,其部署過程分為下面幾步:

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

Zookeeper集群

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

安裝依賴

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

下載解壓

wget或culr直接從這里下載壓縮包,通過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集群沒有是用默認(rèn)的端口號(hào)8080糙俗,使用storm.zookeeper.port修改配置,比如:storm.zookeeper.port: 9999预鬓。
  2. storm.local.dir:nimbus與supervisor守護(hù)進(jìn)程需要一個(gè)文件夾來存儲(chǔ)少量的狀態(tài)數(shù)據(jù)(比如jar包巧骚、配置等)。該配置決定了nimbus和supervisor將信息存儲(chǔ)在哪。該目錄必須存在劈彪,且對(duì)當(dāng)前用戶有適當(dāng)?shù)牟僮鳈?quán)限竣蹦,這個(gè)目錄的內(nèi)容必須在集群運(yùn)行的過程中一直存在,所以避免在/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)聽端口,每個(gè)worker使用單獨(dú)的監(jiān)聽端口,這樣,端口個(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的所有配置都可以通過前綴區(qū)分作用域,如下表所示:

前綴 分類
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是快速失敗的模式勃刨,也就是說,進(jìn)程遇到任何意外情況早敬,都會(huì)立即停止。Storm被設(shè)計(jì)成能夠安全退成秤标、快速回復(fù)的無狀態(tài)進(jìn)程衙猪。如果nimbus或supervisor重啟了撑瞧,不會(huì)對(duì)運(yùn)行中的topology產(chǎn)生任何影響扭屁。

可執(zhí)行程序

Storm提供了多用途的命令行程序葵腹,可以用來啟動(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踏烙,可以通過瀏覽器訪問寡夹。

管理命令

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

nimbus.host: "nimbus"
  1. jar:storm jar topology_jar topology_class [arguments...]磕秤,用來向Storm提交topology,會(huì)上傳topology_jar文件到nimbus并分發(fā)到整個(gè)集群,使用指定topology_class中的main方法。提交完成后贮尉,Storm會(huì)激活并開始運(yùn)行topology览芳。main方法中需要有StormSubmitter.submitTopology方法,并需要有一個(gè)唯一的topology名,如果集群中有同名的topology,jar命令會(huì)執(zhí)行失敗右钾。
  2. kill:storm kill topology_name [-w wait_time]舀射,用來關(guān)閉已經(jīng)部署的topology邢羔。該命令通過topology_name來關(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,用來通知Storm停止特定的topology的spout發(fā)送tuple舍肠,可以在Storm UI上取消激活操作搀继。
  4. active:storm activate topology_name,用來通知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点骑。還可以通過-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,用來查看集群中配置參數(shù)济舆∏湓螅可以看到整個(gè)集群的公共配置,不能單獨(dú)查看topology中覆蓋的特殊配置滋觉。

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

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

CSDN主頁: http://blog.csdn.net/liuxinghao

CSDN博文: storm筆記:storm集群

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末签夭,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子椎侠,更是在濱河造成了極大的恐慌第租,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,331評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件我纪,死亡現(xiàn)場(chǎng)離奇詭異慎宾,居然都是意外死亡丐吓,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,372評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門趟据,熙熙樓的掌柜王于貴愁眉苦臉地迎上來券犁,“玉大人,你說我怎么就攤上這事汹碱≌吵模” “怎么了?”我有些...
    開封第一講書人閱讀 167,755評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵咳促,是天一觀的道長稚新。 經(jīng)常有香客問我,道長等缀,這世上最難降的妖魔是什么枷莉? 我笑而不...
    開封第一講書人閱讀 59,528評(píng)論 1 296
  • 正文 為了忘掉前任娇昙,我火速辦了婚禮尺迂,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘冒掌。我一直安慰自己噪裕,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,526評(píng)論 6 397
  • 文/花漫 我一把揭開白布股毫。 她就那樣靜靜地躺著膳音,像睡著了一般。 火紅的嫁衣襯著肌膚如雪铃诬。 梳的紋絲不亂的頭發(fā)上祭陷,一...
    開封第一講書人閱讀 52,166評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音趣席,去河邊找鬼兵志。 笑死,一個(gè)胖子當(dāng)著我的面吹牛宣肚,可吹牛的內(nèi)容都是我干的想罕。 我是一名探鬼主播,決...
    沈念sama閱讀 40,768評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼霉涨,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼按价!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起笙瑟,我...
    開封第一講書人閱讀 39,664評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤楼镐,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后往枷,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鸠蚪,經(jīng)...
    沈念sama閱讀 46,205評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡今阳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,290評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了茅信。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盾舌。...
    茶點(diǎn)故事閱讀 40,435評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蘸鲸,靈堂內(nèi)的尸體忽然破棺而出妖谴,到底是詐尸還是另有隱情,我是刑警寧澤酌摇,帶...
    沈念sama閱讀 36,126評(píng)論 5 349
  • 正文 年R本政府宣布膝舅,位于F島的核電站,受9級(jí)特大地震影響窑多,放射性物質(zhì)發(fā)生泄漏仍稀。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,804評(píng)論 3 333
  • 文/蒙蒙 一埂息、第九天 我趴在偏房一處隱蔽的房頂上張望技潘。 院中可真熱鬧,春花似錦千康、人聲如沸享幽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,276評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽值桩。三九已至,卻和暖如春豪椿,著一層夾襖步出監(jiān)牢的瞬間奔坟,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來泰國打工搭盾, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留咳秉,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,818評(píng)論 3 376
  • 正文 我出身青樓增蹭,卻偏偏與公主長得像滴某,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子滋迈,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,442評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

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