storm-1.1.1集群的的搭建

storm簡介

名詞解釋:

  • spout兑徘,讀取原始數(shù)據(jù)為bolt提供數(shù)據(jù)
  • bolt ,從spout或其它bolt接收數(shù)據(jù),并處理數(shù)據(jù),處理結(jié)果可作為其它bolt的數(shù)據(jù)源或最終結(jié)果
  • nimbus ,主節(jié)點(diǎn)的守護(hù)進(jìn)程酪我,負(fù)責(zé)為工作節(jié)點(diǎn)分發(fā)任務(wù)消痛。
  • topology 拓?fù)浣Y(jié)構(gòu),Storm的一個任務(wù)單元
  • define field(s) 定義域都哭,由spout或bolt提供秩伞,被bolt接收

基礎(chǔ)知識:
Storm是一個分布式的逞带,可靠的,容錯的數(shù)據(jù)流處理系統(tǒng)纱新。它會把工作任務(wù)委托給不同類型的組件展氓,每個組件負(fù)責(zé)處理一項(xiàng)簡單特定的任務(wù)。Storm集群的輸入流由一個被稱作spout的組件管理脸爱,spout把數(shù)據(jù)傳遞給bolt遇汞, bolt要么把數(shù)據(jù)保存到某種存儲器,要么把數(shù)據(jù)傳遞給其它的bolt簿废。你可以想象一下空入,一個Storm集群就是在一連串的bolt之間轉(zhuǎn)換spout傳過來的數(shù)據(jù)。

Storm組件:
對于一個Storm集群族檬,一個連續(xù)運(yùn)行的主節(jié)點(diǎn)組織若干節(jié)點(diǎn)工作歪赢。
在Storm集群中,有兩類節(jié)點(diǎn):主節(jié)點(diǎn)master node和工作節(jié)點(diǎn)worker nodes单料。主節(jié)點(diǎn)運(yùn)行著一個叫做Nimbus的守護(hù)進(jìn)程埋凯。這個守護(hù)進(jìn)程負(fù)責(zé)在集群中分發(fā)代碼,為工作節(jié)點(diǎn)分配任務(wù)扫尖,并監(jiān)控故障白对。Supervisor守護(hù)進(jìn)程作為拓?fù)涞囊徊糠诌\(yùn)行在工作節(jié)點(diǎn)上。一個Storm拓?fù)浣Y(jié)構(gòu)在不同的機(jī)器上運(yùn)行著眾多的工作節(jié)點(diǎn)藏斩。

Storm的特性:
在所有這些設(shè)計(jì)思想與決策中躏结,有一些非常棒的特性成就了獨(dú)一無二的Storm。

  • 簡化編程:如果你曾試著從零開始實(shí)現(xiàn)實(shí)時處理狰域,你應(yīng)該明白這是一件多么痛苦的事情媳拴。使用Storm,復(fù)雜性被大大降低了兆览。
  • 使用一門基于JVM的語言開發(fā)會更容易屈溉,但是你可以借助一個小的中間件,在Storm上使用任何語言開發(fā)抬探。有現(xiàn)成的中間件可供選擇子巾,當(dāng)然也可以自己開發(fā)中間件。
  • 容錯:Storm集群會關(guān)注工作節(jié)點(diǎn)狀態(tài)小压,如果宕機(jī)了必要的時候會重新分配任務(wù)线梗。
  • 可擴(kuò)展 :所有你需要為擴(kuò)展集群所做的工作就是增加機(jī)器。Storm會在新機(jī)器就緒時向它們分配任務(wù)怠益。
  • 可靠的:所有消息都可保證至少處理一次仪搔。如果出錯了,消息可能處理不只一次蜻牢,不過你永遠(yuǎn)不會丟失消息烤咧。
  • 快速:速度是驅(qū)動Storm設(shè)計(jì)的一個關(guān)鍵因素
  • 事務(wù)性:你可以為幾乎任何計(jì)算得到恰好一次消息語義偏陪。

以下是設(shè)置Storm群集的步驟:

  1. 建立一個Zookeeper集群
  2. 安裝依賴項(xiàng)
  3. 下載Storm
  4. 配置storm.yaml文件
  5. 啟動storm集群

首先需要搭建一個zookeeper集群

Storm使用Zookeeper來協(xié)調(diào)群集。 Zookeeper不用于消息傳遞煮嫌,所以Zookeeper上的負(fù)載Storm比較低笛谦。 在大多數(shù)情況下,單節(jié)點(diǎn)Zookeeper集群應(yīng)該足夠了昌阿,但是如果您想要故障切換或正在部署大型Storm集群饥脑,則可能需要較大的Zookeeper集群。 這里是部署Zookeeper的說明宝泵。
有關(guān)Zookeeper部署的一些注意事項(xiàng):

  • 在監(jiān)督下運(yùn)行Zookeeper是非常重要的好啰,因?yàn)閆ookeeper是快速失敗的,如果遇到任何錯誤情況儿奶,將會退出進(jìn)程框往。 在這里看到更多的細(xì)節(jié)。
  • 設(shè)置一個cron來壓縮Zookeeper的數(shù)據(jù)和事務(wù)日志是至關(guān)重要的闯捎。 Zookeeper守護(hù)進(jìn)程本身并不這樣做椰弊,如果你沒有設(shè)置cron,Zookeeper將很快用完磁盤空間瓤鼻。 在這里看到更多的細(xì)節(jié)秉版。

安裝依賴

  • Java 7+
  • Python 2.6.6

下載storm

cd /opt
wget http://mirror.bit.edu.cn/apache/storm/apache-storm-1.1.1/apache-storm-1.1.1.tar.gz
tar -zxvf apache-storm-1.1.1.tar.ge
cd apache-storm-1.1.1

配置storm

Storm版本包含conf/storm.yaml文件,用于配置Storm守護(hù)進(jìn)程茬祷。 你可以在這里看到默認(rèn)的配置值清焕。 storm.yaml將覆蓋defaults.yaml中的任何內(nèi)容。 有幾個配置是強(qiáng)制性的祭犯,以獲得一個工作集群:

  1. storm.zookeeper.servers:這是Storm集群的Zookeeper集群中的主機(jī)列表秸妥。 它應(yīng)該看起來像這樣:
storm.zookeeper.servers:
  - "192.168.10.101" #填寫zookeeper集群的ip地址或者主機(jī)名
  - "192.168.10.102"
  - "192.168.10.103"

如果您的Zookeeper集群使用的端口與默認(rèn)端口(2181)不同,您應(yīng)該設(shè)置storm.zookeeper.port沃粗。

  1. storm.local.dir:Nimbus和Supervisor守護(hù)進(jìn)程需要本地磁盤上的一個目錄來存儲少量的狀態(tài)(比如jar粥惧,confs等等)。 您應(yīng)該在每臺機(jī)器上創(chuàng)建該目錄(mkdir /home/storm)最盅,給予適當(dāng)?shù)臋?quán)限突雪,然后使用此配置填寫目錄位置。 例如:
storm.local.dir: "/home/storm"
  1. nimbus.seeds:工作節(jié)點(diǎn)(worker nodes)需要知道哪些機(jī)器是主機(jī)的候選者涡贱,以便下載拓?fù)浣Y(jié)構(gòu)的jar和conf咏删。 例如:
nimbus.seeds: ["192.168.10.101"]
  1. supervisor.slots.ports:對于每個工作機(jī)器,使用此配置可以配置在該機(jī)器上運(yùn)行的worker數(shù)量问词。 每個worker使用單個端口接收消息督函,并且此設(shè)置定義哪些端口是打開使用的。 如果你在這里定義了五個端口,那么Storm將會分配多達(dá)五個worker在這臺機(jī)器上運(yùn)行侨核。 如果你定義了三個端口,Storm最多只能運(yùn)行三個端口灌灾。 默認(rèn)情況下搓译,此設(shè)置被配置為在端口6700,6701,6702和6703上運(yùn)行4個worker。例如:
supervisor.slots.ports:
    - 6700
    - 6701
    - 6702
    - 6703
  1. Storm提供了一種機(jī)制锋喜,管理員可以通過配置該機(jī)制管理定期運(yùn)行的腳本些己,以確定節(jié)點(diǎn)是否健康。 管理員可以通過在位于storm.health.check.dir中的腳本中執(zhí)行任何選擇檢查來確定節(jié)點(diǎn)是否處于健康狀態(tài)嘿般。如果腳本檢測到節(jié)點(diǎn)處于不健康的狀態(tài)段标,則必須以字符串ERROR打印一行到標(biāo)準(zhǔn)輸出。 supervisor將定期在健康檢查目錄中運(yùn)行腳本并檢查輸出炉奴。 如果腳本的輸出包含字符串ERROR逼庞,如上所述,supervisor將關(guān)閉所有workers并退出瞻赶。
    如果supervisor在監(jiān)督下運(yùn)行赛糟,則可以調(diào)用“/ bin / storm node-health-check”來確定是否應(yīng)該啟動supervisor或者該節(jié)點(diǎn)是否不健康。
    運(yùn)行狀況檢查目錄位置可以配置為:
storm.health.check.dir: "healthchecks"

腳本必須具有執(zhí)行權(quán)限砸逊。 允許任何給定的健康檢查腳本在被標(biāo)記為失敗之前運(yùn)行的時間由于超時而失敗璧南,可以使用以下方法進(jìn)行配置:

storm.health.check.timeout.ms: 5000

ok,保存退出,配置就算完成了师逸。

  1. 配置外部庫和環(huán)境變量(可選)
    如果您需要外部庫或自定義插件的支持司倚,可以將這些jar放入extlib /和extlib-daemon /目錄中。 請注意篓像,extlib-daemon /目錄存儲了僅由守護(hù)進(jìn)程(Nimbus动知,Supervisor,DRPC遗淳,UI拍柒,Logviewer)使用的jar,例如HDFS和定制調(diào)度庫屈暗。 因此拆讯,用戶可以配置兩個環(huán)境變量STORM_EXT_CLASSPATH和STORM_EXT_CLASSPATH_DAEMON,以包含外部類路徑和僅守護(hù)進(jìn)程的外部類路徑养叛。

啟動守護(hù)進(jìn)程

最后一步是啟動所有的Storm守護(hù)進(jìn)程种呐。 在監(jiān)督下運(yùn)行這些守護(hù)進(jìn)程是非常重要的。 Storm是一個快速失敗(fail-fast)系統(tǒng)弃甥,意味著只要遇到意外錯誤爽室,進(jìn)程就會停止。 Storm的設(shè)計(jì)可以在任何時候安全停止淆攻,并在重新啟動過程時正確恢復(fù)阔墩。 這就是為什么Storm在進(jìn)程中不保持狀態(tài) - 如果Nimbus或Supervisors重新啟動嘿架,運(yùn)行的拓?fù)浣Y(jié)構(gòu)不受影響。 以下是如何運(yùn)行Storm守護(hù)進(jìn)程:

  1. Nimbus:在Storm主控節(jié)點(diǎn)上運(yùn)行命令bin/storm nimbus &啸箫,啟動Nimbus后臺程序耸彪,并放到后臺執(zhí)行。
  2. Supervisor:在Storm各個工作節(jié)點(diǎn)上運(yùn)行命令bin/storm supervisor &忘苛。啟動Supervisor后臺程序蝉娜,并放到后臺執(zhí)行。 Supervisor守護(hù)進(jìn)程負(fù)責(zé)啟動和停止該機(jī)器上的工作進(jìn)程扎唾。
  3. UI: 在Storm主控節(jié)點(diǎn)上運(yùn)行命令bin/storm ui &召川,啟動UI后臺程序,并放到后臺執(zhí)行胸遇。運(yùn)行Storm UI(一個您可以從瀏覽器訪問的網(wǎng)站荧呐,該網(wǎng)站可以對集群和拓?fù)溥M(jìn)行診斷)。 可以通過瀏覽您的Web瀏覽器訪問UI:http:// {ui host}:8080纸镊。
    通過命令jps可以看到相應(yīng)的進(jìn)程已經(jīng)啟動起來了坛增。

配置環(huán)境變量

vim /etc/profile
export STORM_HOME=/opt/apache-storm-1.1.1
export PATH=$PATH:$STORM_HOME/bin
#保存退出即可
source /etc/profile #使配置文件立即生效

storm常用命令

通過執(zhí)行命令storm就可以列出storm的所有命令列表了。

  1. jar命令負(fù)責(zé)把拓?fù)涮峤坏郊罕∧澹?zhí)行它收捣,通過StormSubmitter執(zhí)行主類。
storm jar path-to-topology-jar class-with-the-main arg1 arg2 argN

path-to-topology-jar是拓?fù)鋔ar文件的全路徑庵楷,它包含拓?fù)浯a和依賴的庫罢艾。 class-with-the-main是包含main方法的類,這個類將由StormSubmitter執(zhí)行尽纽,其余的參數(shù)作為main方法的參數(shù)咐蚯。

  1. 停用拓?fù)洌?/li>
storm deactivte topology-name 
  1. 啟動一個停用的拓?fù)洌?/li>
storm activate topology-name
  1. 殺死一個拓?fù)洌?/li>
storm kill topology-name
  1. 再平衡拓?fù)?再平衡使你重分配集群任務(wù)。這是個很強(qiáng)大的命令弄贿。比如春锋,你向一個運(yùn)行中的集群增加了節(jié)點(diǎn)。再平衡命令將會停用拓?fù)洳畎迹缓笤谙鄳?yīng)超時時間之后重分配工人期奔,并重啟拓?fù)洹?:
storm rebalance topology-name

END

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市危尿,隨后出現(xiàn)的幾起案子呐萌,更是在濱河造成了極大的恐慌,老刑警劉巖谊娇,帶你破解...
    沈念sama閱讀 212,029評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肺孤,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)赠堵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,395評論 3 385
  • 文/潘曉璐 我一進(jìn)店門小渊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人茫叭,你說我怎么就攤上這事粤铭。” “怎么了杂靶?”我有些...
    開封第一講書人閱讀 157,570評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長酱鸭。 經(jīng)常有香客問我吗垮,道長,這世上最難降的妖魔是什么凹髓? 我笑而不...
    開封第一講書人閱讀 56,535評論 1 284
  • 正文 為了忘掉前任烁登,我火速辦了婚禮,結(jié)果婚禮上蔚舀,老公的妹妹穿的比我還像新娘饵沧。我一直安慰自己,他們只是感情好赌躺,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,650評論 6 386
  • 文/花漫 我一把揭開白布狼牺。 她就那樣靜靜地躺著,像睡著了一般礼患。 火紅的嫁衣襯著肌膚如雪是钥。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,850評論 1 290
  • 那天缅叠,我揣著相機(jī)與錄音悄泥,去河邊找鬼。 笑死肤粱,一個胖子當(dāng)著我的面吹牛弹囚,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播领曼,決...
    沈念sama閱讀 39,006評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼鸥鹉,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了庶骄?” 一聲冷哼從身側(cè)響起宋舷,我...
    開封第一講書人閱讀 37,747評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎瓢姻,沒想到半個月后祝蝠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,207評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,536評論 2 327
  • 正文 我和宋清朗相戀三年绎狭,在試婚紗的時候發(fā)現(xiàn)自己被綠了细溅。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,683評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡儡嘶,死狀恐怖喇聊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蹦狂,我是刑警寧澤誓篱,帶...
    沈念sama閱讀 34,342評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站凯楔,受9級特大地震影響窜骄,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜摆屯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,964評論 3 315
  • 文/蒙蒙 一邻遏、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧虐骑,春花似錦准验、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,772評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至颠黎,卻和暖如春济似,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背盏缤。 一陣腳步聲響...
    開封第一講書人閱讀 32,004評論 1 266
  • 我被黑心中介騙來泰國打工砰蠢, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人唉铜。 一個月前我還...
    沈念sama閱讀 46,401評論 2 360
  • 正文 我出身青樓台舱,卻偏偏與公主長得像,于是被迫代替她去往敵國和親潭流。 傳聞我的和親對象是個殘疾皇子竞惋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,566評論 2 349