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群集的步驟:
- 建立一個Zookeeper集群
- 安裝依賴項(xiàng)
- 下載Storm
- 配置storm.yaml文件
- 啟動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)制性的祭犯,以獲得一個工作集群:
-
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
沃粗。
-
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"
-
nimbus.seeds
:工作節(jié)點(diǎn)(worker nodes)需要知道哪些機(jī)器是主機(jī)的候選者涡贱,以便下載拓?fù)浣Y(jié)構(gòu)的jar和conf咏删。 例如:
nimbus.seeds: ["192.168.10.101"]
-
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
- 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,保存退出,配置就算完成了师逸。
- 配置外部庫和環(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)程:
-
Nimbus
:在Storm主控節(jié)點(diǎn)上運(yùn)行命令bin/storm nimbus &
啸箫,啟動Nimbus后臺程序耸彪,并放到后臺執(zhí)行。 -
Supervisor
:在Storm各個工作節(jié)點(diǎn)上運(yùn)行命令bin/storm supervisor &
忘苛。啟動Supervisor后臺程序蝉娜,并放到后臺執(zhí)行。Supervisor
守護(hù)進(jìn)程負(fù)責(zé)啟動和停止該機(jī)器上的工作進(jìn)程扎唾。 -
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的所有命令列表了。
- 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ù)咐蚯。
- 停用拓?fù)洌?/li>
storm deactivte topology-name
- 啟動一個停用的拓?fù)洌?/li>
storm activate topology-name
- 殺死一個拓?fù)洌?/li>
storm kill topology-name
- 再平衡拓?fù)?再平衡使你重分配集群任務(wù)。這是個很強(qiáng)大的命令弄贿。比如春锋,你向一個運(yùn)行中的集群增加了節(jié)點(diǎn)。再平衡命令將會停用拓?fù)洳畎迹缓笤谙鄳?yīng)超時時間之后重分配工人期奔,并重啟拓?fù)洹?:
storm rebalance topology-name
END