基于案例Storm實(shí)時(shí)流計(jì)算_第1頁(yè)
基于案例Storm實(shí)時(shí)流計(jì)算_第2頁(yè)
基于案例Storm實(shí)時(shí)流計(jì)算_第3頁(yè)
基于案例Storm實(shí)時(shí)流計(jì)算_第4頁(yè)
基于案例Storm實(shí)時(shí)流計(jì)算_第5頁(yè)
已閱讀5頁(yè),還剩14頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

基于案例講解Storm實(shí)時(shí)計(jì)算目錄Storm的應(yīng)用場(chǎng)景舉例Storm簡(jiǎn)介Storm的主要特點(diǎn)Storm組件Storm編程模型Storm安裝Storm實(shí)例講解Storm的應(yīng)用場(chǎng)景舉例淘寶雙十一實(shí)時(shí)銷(xiāo)售額統(tǒng)計(jì)車(chē)輛7*24小時(shí)監(jiān)控電信行業(yè)重大節(jié)假日實(shí)時(shí)保障監(jiān)控電商實(shí)時(shí)推薦1.

Storm是一個(gè)分布式的、容錯(cuò)的實(shí)時(shí)計(jì)算系統(tǒng),它采用Clojure編寫(xiě)的2.Storm可被用于“流處理”之中,實(shí)時(shí)處理消息并更新數(shù)據(jù)庫(kù)3.Storm可以進(jìn)行連續(xù)查詢(xún)并把結(jié)果即時(shí)反饋給客戶(hù),比如將Twitter上的熱門(mén)話題發(fā)送到客戶(hù)端4.Storm可以用來(lái)并行處理密集查詢(xún),Storm的拓?fù)浣Y(jié)構(gòu)是一個(gè)等待調(diào)用信息的分布函數(shù),當(dāng)它收到一條調(diào)用信息后,會(huì)對(duì)查詢(xún)進(jìn)行計(jì)算,并返回查詢(xún)結(jié)果。Storm簡(jiǎn)介Storm的主要特點(diǎn)1.簡(jiǎn)單的編程模型。類(lèi)似于MapReduce降低了并行批處理復(fù)雜性,Storm降低了進(jìn)行實(shí)時(shí)處理的復(fù)雜性。2.可以使用各種編程語(yǔ)言。你可以在Storm之上使用各種編程語(yǔ)言。默認(rèn)支持Clojure、Java、Ruby和Python。3.水平擴(kuò)展。計(jì)算是在多個(gè)線程、進(jìn)程和服務(wù)器之間并行進(jìn)行的。4.可靠的消息處理。Storm保證每個(gè)消息至少能得到一次完整處理。任務(wù)失敗時(shí),它會(huì)負(fù)責(zé)從消息源重試消息。5.快速。系統(tǒng)的設(shè)計(jì)保證了消息能得到快速的處理,使用ZeroMQ作為其底層消息隊(duì)列。6.本地模式。Storm有一個(gè)“本地模式”,可以在處理過(guò)程中完全模擬Storm集群。這讓你可以快速進(jìn)行開(kāi)發(fā)和單元測(cè)試。Storm組件首先我們通過(guò)一個(gè)storm和hadoop的對(duì)比來(lái)了解storm中的基本概念。hadoopstorm系統(tǒng)角色JobtrackerNimbusTasktrackerSupervisorChildWorker應(yīng)用名稱(chēng)JobTopology組件接口M/RSpout/Bolt運(yùn)行狀態(tài)數(shù)據(jù)處理完就結(jié)束一旦運(yùn)行,根本停不下來(lái)。。。Nimbus:負(fù)責(zé)資源分配和任務(wù)調(diào)度。Supervisor:負(fù)責(zé)接受nimbus分配的任務(wù),啟動(dòng)和停止屬于自己管理的worker進(jìn)程。Worker:運(yùn)行具體處理組件邏輯的進(jìn)程。Task:worker中每一個(gè)spout/bolt的線程稱(chēng)為一個(gè)task.在storm0.8之后,task不再與物理線程對(duì)應(yīng),同一個(gè)spout/bolt的task可能會(huì)共享一個(gè)物理線程,該線程稱(chēng)為executor。Storm組件下面這個(gè)圖描述了以上幾個(gè)角色之間的關(guān)系。NimbuszookeeperzookeeperzookeeperSupervisorSupervisorSupervisorSupervisorSupervisorSupervisorWorkerWorkerWorker主控節(jié)點(diǎn),用于提交任務(wù),分配集群任務(wù),監(jiān)控集群狀態(tài)協(xié)調(diào),存放集群的公共數(shù)據(jù)(心跳,集群狀態(tài),配置信息),Nimbus分配給Supervisor的任務(wù)接受Nimbus分配的任務(wù),管理自己的Worker進(jìn)程具體的處理邏輯組件Storm組件在storm中,應(yīng)用程序的實(shí)現(xiàn)實(shí)時(shí)處理的邏輯被封裝在Topology中一個(gè)Topology是由Spout組件(數(shù)據(jù)源)和Bolt組件(數(shù)據(jù)操作)通過(guò)StreamGroupings進(jìn)行連接的TopologySpout數(shù)據(jù)源是否在高速上在高速上,速度是否>120<=120>120存入超速數(shù)據(jù)庫(kù)不在高速上,速度是否>80>80<=80實(shí)時(shí)監(jiān)控超速車(chē)輛Storm組件簡(jiǎn)而言之,Spout從來(lái)源處讀取數(shù)據(jù)并放入topology。Spout分成可靠和不可靠?jī)煞N;當(dāng)Storm接收失敗時(shí),可靠的Spout會(huì)對(duì)tuple(元組,數(shù)據(jù)項(xiàng)組成的列表)進(jìn)行重發(fā);而不可靠的Spout不會(huì)考慮接收成功與否只發(fā)射一次。而Spout中最主要的方法就是nextTuple(),該方法會(huì)發(fā)射一個(gè)新的tuple到topology,如果沒(méi)有新tuple發(fā)射則會(huì)簡(jiǎn)單的返回一個(gè)Topology是由Spout組件(數(shù)據(jù)源)和Bolt組件(數(shù)據(jù)操作)通過(guò)StreamTopology中所有的處理都由Bolt完成。Bolt可以完成任何事,比如:連接的過(guò)濾、聚合、訪問(wèn)文件/數(shù)據(jù)庫(kù)、等等。Bolt從Spout中接收數(shù)據(jù)并進(jìn)行處理,如果遇到復(fù)雜流的處理也可能將tuple發(fā)送給另一個(gè)Bolt進(jìn)行處理。而B(niǎo)olt中最重要的方法是execute(),以新的tuple作為參數(shù)接收。不管是Spout還是Bolt,如果將tuple發(fā)射成多個(gè)流,這些流都可以通過(guò)declareStream()來(lái)聲明。SpoutBoltStorm組件StreamGrouping定義了一個(gè)流在Bolt任務(wù)間該如何被切分。隨機(jī)分組(Shufflegrouping):隨機(jī)分發(fā)tuple到Bolt的任務(wù),保證每個(gè)任務(wù)獲得相等數(shù)量的tuple。字段分組(Fieldsgrouping):根據(jù)指定字段分割數(shù)據(jù)流,并分組。例如,根據(jù)“user-id”字段,相同“user-id”的元組總是分發(fā)到同一個(gè)任務(wù),不同“user-id”的元組可能分發(fā)到不同的任務(wù)。全部分組(Allgrouping):tuple被復(fù)制到bolt的所有任務(wù)。這種類(lèi)型需要謹(jǐn)慎使用。全局分組(Globalgrouping):全部流都分配到bolt的同一個(gè)任務(wù)。明確地說(shuō),是分配給ID最小的那個(gè)task。無(wú)分組(Nonegrouping):你不需要關(guān)心流是如何分組。目前,無(wú)分組等效于隨機(jī)分組。但最終,Storm將把無(wú)分組的Bolts放到Bolts或Spouts訂閱它們的同一線程去執(zhí)行(如果可能)。直接分組(Directgrouping):這是一個(gè)特別的分組類(lèi)型。元組生產(chǎn)者決定tuple由哪個(gè)元組處理者任務(wù)接收。當(dāng)然還可以實(shí)現(xiàn)CustomStreamGroupimg接口來(lái)定制自己需要的分組。StreamGroupingStorm編程模型

可實(shí)現(xiàn)接口Ispout,或繼承BaseSpout主要方法:

open方法是初始化動(dòng)作。允許你在該spout初始化時(shí)做一些動(dòng)作,傳入了上下文,方便取上下文的一些數(shù)據(jù)。

close方法在該spout關(guān)閉前執(zhí)行,但是并不能得到保證其一定被執(zhí)行。spout是作為task運(yùn)行在worker內(nèi),在cluster模式下,supervisor會(huì)直接kill-9woker的進(jìn)程,這樣它就無(wú)法執(zhí)行了。而在本地模式下,只要不是kill-9,如果是發(fā)送停止命令,是可以保證close的執(zhí)行的。

activate和deactivate

:一個(gè)spout可以被暫時(shí)激活和關(guān)閉,這兩個(gè)方法分別在對(duì)應(yīng)的時(shí)刻被調(diào)用。

nextTuple

用來(lái)發(fā)射數(shù)據(jù)。

ack(Object)

傳入的Object其實(shí)是一個(gè)id,唯一表示一個(gè)tuple。該方法是這個(gè)id所對(duì)應(yīng)的tuple被成功處理后執(zhí)行。

fail(Object)

同ack,只不過(guò)是tuple處理失敗時(shí)執(zhí)行。declareOutputFields

申明要發(fā)射的字段SpoutStorm編程模型

可實(shí)現(xiàn)接口IBolt,或BaseRichbolt主要方法:

IBolt繼承了java.io.Serializable,我們?cè)趎imbus上提交了topology以后,創(chuàng)建出來(lái)的bolt會(huì)序列化后發(fā)送到具體執(zhí)行的worker上去。worker在執(zhí)行該Bolt時(shí),會(huì)先調(diào)用prepare方法傳入當(dāng)前執(zhí)行的上下文execute接受一個(gè)tuple進(jìn)行處理,并用prepare方法傳入的OutputCollector的ack方法(表示成功)或fail(表示失?。﹣?lái)反饋處理結(jié)果cleanup同ISpout的close方法,在關(guān)閉前調(diào)用。同樣不保證其一定執(zhí)行execute最重要的方法,用來(lái)處理自己的業(yè)務(wù)邏輯declareOutputFields

申明要發(fā)射的字段BoltStorm安裝搭建Zookeeper集群安裝Storm依賴(lài)庫(kù)(ZeromQ,JZMQ,JDK,Python)下載并解壓Storm發(fā)布版本修改storm.yaml配置文件啟動(dòng)Storm各個(gè)后臺(tái)進(jìn)程N(yùn)imbus:bin/stormnimbusSupervisor:bin/stormsupervisorUI:stormuiStorm實(shí)例講解仿淘寶雙十一實(shí)時(shí)監(jiān)控銷(xiāo)售額1.從activemq中接受訂單信息(數(shù)據(jù)格式:用戶(hù)id|時(shí)間|金額|商品id|商家id)2.計(jì)算訂單金額,一分鐘輸出一次3.合并計(jì)算結(jié)果,并寫(xiě)入mysqlmqSpout從mq中接受訂單信息CountBolt計(jì)算金額MergeBolt匯總,寫(xiě)入Mysql前臺(tái)界面展示,每30秒查一次數(shù)據(jù)庫(kù)CountBolt計(jì)算金額CountBolt計(jì)算金額CountBolt計(jì)算金額Storm實(shí)例講解仿淘寶雙十一實(shí)時(shí)監(jiān)控銷(xiāo)售額1.從activemq中接受訂單信息(數(shù)據(jù)格式:用戶(hù)id|時(shí)間|金額|商品id|商家id)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論