您好,登錄后才能下訂單哦!
這篇文章主要講解了“Storm組件有哪些”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“Storm組件有哪些”吧!
Storm 組件
Storm集群表面上與hadoop集群類似。在hadoop集群上,你可以跑 mapreduce job,而在storm集群上你可以跑各種topology。但其實(shí) mapreduce job 和 topology,他們是非常不一樣的——其中最主要的差別就是,一個(gè)Mapreduce job 可以運(yùn)行結(jié)束,然后一個(gè)topology會(huì)一直處理信息直到你kill它。
在一個(gè)Storm集群有兩種節(jié)點(diǎn):master node 和 worker nodes。Master node 運(yùn)行著一個(gè)守護(hù)進(jìn)程,叫做"Nimbus",這非常類似于hadoop 1.0時(shí)代的 JobTracker。Nimbus負(fù)責(zé)分發(fā)code,分配task給node,和監(jiān)控。
每個(gè)worker node運(yùn)行著一個(gè)守護(hù)進(jìn)程,叫做"Supervisor"。Supervisor監(jiān)聽那些分配給當(dāng)前node的任務(wù),啟動(dòng)和終止worker processes(worker process處理那些Nimbus分配給它需要處理的任務(wù))。而每個(gè)worker process執(zhí)行一部分的topolgy;一個(gè)執(zhí)行中的topology包含了很多worker processes執(zhí)行在集群中。
Nimbus和 Supervisors之間的協(xié)作是通過(guò)Zookeeper集群完成的。另外,Nimbus 和 Supervisor是 快速失敗 和 無(wú)狀態(tài)化(TODO understand),而所有的狀態(tài)是保存在Zookeeper或者本地磁盤。換而言之,你可以用 kill -9 來(lái)殺死 Nimbus 或者 Supervisors,而它們會(huì)馬上變回好像什么都沒發(fā)生過(guò)一樣。這些設(shè)計(jì)致使Storm 集群非常穩(wěn)定。(但愿如此,馬上要用到項(xiàng)目中了......)
Topology
在Storm上做實(shí)時(shí)計(jì)算,你需要?jiǎng)?chuàng)建 "Topology"。在Topology中的每個(gè)node涵蓋 邏輯處理, nodes間數(shù)據(jù)傳遞依賴等等。
執(zhí)行一個(gè)Topology非常簡(jiǎn)單。首先, 你需要打包你全部的代碼和依賴到一個(gè)jar,然后,你可以執(zhí)行接下來(lái)的命令:
storm jar all-my-code.jar backtype.storm.MyTopology arg1 arg2
這命令會(huì)執(zhí)行類backtype.storm.MyTopology,并帶入外部參數(shù) arg1和arg2(給main函數(shù)用)。而這個(gè)類的main方法會(huì)定義topology,并提交給Nimbus。Storm jar會(huì)負(fù)責(zé)連接Nimbus,并上傳這個(gè)jar。
由于topology的結(jié)構(gòu)定義是Thrift(facebook 寫的一個(gè)夸語(yǔ)言調(diào)用框架)結(jié)構(gòu),同時(shí)Nimbus也是也是一個(gè)Thrift服務(wù),所以你能創(chuàng)建和提交任何語(yǔ)言寫的topology。
Streams
在Storm里最抽象的是 "stream"。Stream是一個(gè)無(wú)邊界且序列化的tuples。Storm提供了原語(yǔ)來(lái)把一個(gè)stream轉(zhuǎn)化成另一個(gè)新的stream,且這種轉(zhuǎn)化是分布式的,可靠的。下圖就是Stream的寫照。
Storm提供的這種原語(yǔ)是 spouts 和 bolts。Spouts 和 bolts 都有接口,你需要實(shí)現(xiàn)來(lái)執(zhí)行你的應(yīng)用邏輯。
Spout是stream的來(lái)源。舉個(gè)栗子,一個(gè)spout可能讀取tuples從Kestrel隊(duì)列中,并且發(fā)射這些數(shù)據(jù)以流的形式?;蛘哒f(shuō),一個(gè)spout會(huì)連接Twitter的API 來(lái)發(fā)射數(shù)據(jù)流。(對(duì)于Storm來(lái)說(shuō),Spout就是源數(shù)據(jù)的抓取者,負(fù)責(zé)為整個(gè)流式計(jì)算提供源源不斷的數(shù)據(jù)流。)
Bolt則是stream的消費(fèi)者,做一些數(shù)據(jù)處理,同時(shí)也可能發(fā)射新的數(shù)據(jù)流。混合復(fù)雜的流轉(zhuǎn)化,需要多個(gè)步驟,多個(gè)bolts。Bolts能做任何事情,像執(zhí)行functions,過(guò)濾tuples,數(shù)據(jù)流聚合,數(shù)據(jù)流join,與數(shù)據(jù)庫(kù)間的協(xié)作 等等。(對(duì)于Storm來(lái)說(shuō),Bolt是數(shù)據(jù)流的處理者,可以有多個(gè),負(fù)責(zé)真正業(yè)務(wù)邏輯上的聚合計(jì)算等等。)
Spouts和Bolts間的網(wǎng)絡(luò)傳輸被打包進(jìn)一個(gè) topology,然后你交于一個(gè)Storm集群去執(zhí)行。當(dāng)一個(gè)spout或bolt發(fā)射一個(gè)tuple到流里時(shí), 它會(huì)發(fā)射這個(gè)tuple到所有的抓取這個(gè)流的bolt中。(需要注意的是,如果多個(gè)處理相同邏輯業(yè)務(wù)的bolt在發(fā)生數(shù)據(jù)聚合時(shí),bolt的聚合結(jié)果未必是最終結(jié)果,這個(gè)和多個(gè)reducer計(jì)算Top one的情況是一樣的。)
在Storm里每個(gè)node執(zhí)行是并行的。在你的topology里,你能指定node的并行度(比如 5),然后Storm會(huì)產(chǎn)生與其相當(dāng)數(shù)量的Thread在集群中執(zhí)行。
一個(gè)Topology會(huì)一直執(zhí)行下去的,或者你kill了它。Storm也會(huì)自動(dòng)地重分配那些失敗了task。當(dāng)然,Storm也會(huì)保證沒有任何的數(shù)據(jù)丟失,甚至機(jī)器下線和數(shù)據(jù)刪除(TODO 有待深究原理)
感謝各位的閱讀,以上就是“Storm組件有哪些”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)Storm組件有哪些這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。