流式计算strom,Strom解决的问题,实现实时计算系统要解决那些问题,离线计算是什么,流式计算什么,离线和实时计算区别,strom应用场景,Strorm架构图和编程模型(来自学习资料)
1、背景-流式計(jì)算與storm
2011年在海量數(shù)據(jù)處理領(lǐng)域,Hadoop是人們津津樂(lè)道的技術(shù),Hadoop不僅可以用來(lái)存儲(chǔ)海量數(shù)據(jù),還以用來(lái)計(jì)算海量數(shù)據(jù)。因?yàn)槠涓咄掏隆⒏呖煽康忍攸c(diǎn),很多互聯(lián)網(wǎng)公司都已經(jīng)使用Hadoop來(lái)構(gòu)建數(shù)據(jù)倉(cāng)庫(kù),高頻使用并促進(jìn)了Hadoop生態(tài)圈的各項(xiàng)技術(shù)的發(fā)展。一般來(lái)講,根據(jù)業(yè)務(wù)需求,數(shù)據(jù)的處理可以分為離線處理和實(shí)時(shí)處理,在離線處理方面Hadoop提供了很好的解決方案,但是針對(duì)海量數(shù)據(jù)的實(shí)時(shí)處理卻一直沒(méi)有比較好的解決方案。
就在人們翹首以待的時(shí)間節(jié)點(diǎn),storm橫空出世,與生俱來(lái)的分布式、高可靠、高吞吐的特性,橫掃市面上的一些流式計(jì)算框架,漸漸的成為了流式計(jì)算的首選框架。
如果龐麥郎在的話,他一定會(huì)說(shuō),這就是我要的滑板鞋!
在2013年,阿里巴巴開(kāi)源了基于storm的設(shè)計(jì)思路使用java重現(xiàn)編寫(xiě)的流式計(jì)算框架jstorm。那jstorm是什么呢?
在jstorm早期的介紹中,一般會(huì)出現(xiàn)下面的語(yǔ)句:JStorm 比Storm更穩(wěn)定,更強(qiáng)大,更快,Storm上跑的程序,一行代碼不變可以運(yùn)行在JStorm上。
在最新的介紹中,jstorm的團(tuán)隊(duì)是這樣介紹的:JStorm 是一個(gè)類(lèi)似Hadoop MapReduce的系統(tǒng), 用戶按照指定的接口實(shí)現(xiàn)一個(gè)任務(wù),然后將這個(gè)任務(wù)遞交給JStorm系統(tǒng),Jstorm將這個(gè)任務(wù)跑起來(lái),并且按7 * 24小時(shí)運(yùn)行起來(lái),一旦中間一個(gè)Worker 發(fā)生意外故障, 調(diào)度器立即分配一個(gè)新的Worker替換這個(gè)失效的Worker。
因此,從應(yīng)用的角度,JStorm 應(yīng)用是一種遵守某種編程規(guī)范的分布式應(yīng)用。
從系統(tǒng)角度, JStorm一套類(lèi)似MapReduce的調(diào)度系統(tǒng)。 從數(shù)據(jù)的角度, 是一套基于流水線的消息處理機(jī)制。實(shí)時(shí)計(jì)算現(xiàn)在是大數(shù)據(jù)領(lǐng)域中最火爆的一個(gè)方向,因?yàn)槿藗儗?duì)數(shù)據(jù)的要求越來(lái)越高,實(shí)時(shí)性要求也越來(lái)越快,傳統(tǒng)的Hadoop MapReduce,逐漸滿足不了需求,因此在這個(gè)領(lǐng)域需求不斷。現(xiàn)在,Jstom在淘寶海量的數(shù)據(jù)和大量的業(yè)務(wù)場(chǎng)景的錘煉下,從開(kāi)始的追隨者,使用者慢慢的演變成了流式計(jì)算技術(shù)的領(lǐng)導(dǎo)者。當(dāng)下,還有很多企業(yè)并不知道jstorm,他們的生產(chǎn)環(huán)境依然是storm,并且storm也在不斷更新,在筆者成文的時(shí)間點(diǎn)上,storm發(fā)布了1.0的beta版。
鑒于大多數(shù)企業(yè)的生產(chǎn)環(huán)境還在使用storm,我們學(xué)習(xí)的目標(biāo)還是切換到Apache基金會(huì)的storm上來(lái)。
2、背景-Storm是為了解決什么樣的問(wèn)題
伴隨著信息科技日新月異的發(fā)展,信息呈現(xiàn)出爆發(fā)式的膨脹,人們獲取信息的途徑也更加多樣、更加便捷,同時(shí)對(duì)于信息的時(shí)效性要求也越來(lái)越高。
舉個(gè)搜索場(chǎng)景中的例子,當(dāng)一個(gè)賣(mài)家發(fā)布了一條寶貝信息時(shí),他希望的當(dāng)然是這個(gè)寶貝馬上就可以被賣(mài)家搜索出來(lái)、點(diǎn)擊、購(gòu)買(mǎi)啦,相反,如果這個(gè)寶貝要等到第二天或者更久才可以被搜出來(lái),估計(jì)這個(gè)大哥就要罵娘了。
再舉一個(gè)推薦的例子,如果用戶昨天在淘寶上買(mǎi)了一雙襪子,今天想買(mǎi)一副泳鏡去游泳,但是卻發(fā)現(xiàn)系統(tǒng)在不遺余力地給他推薦襪子、鞋子,根本對(duì)他今天尋找泳鏡的行為視而不見(jiàn),估計(jì)這哥們心里就會(huì)想推薦你妹呀。其實(shí)稍微了解點(diǎn)背景知識(shí)的碼農(nóng)們都知道,這是因?yàn)楹笈_(tái)系統(tǒng)做的是每天一次的全量處理,而且大多是在夜深人靜之時(shí)做的,那么你今天白天做的事情當(dāng)然要明天才能反映出來(lái)啦。
3、背景-實(shí)現(xiàn)實(shí)時(shí)計(jì)算系統(tǒng)需要解決那些問(wèn)題
如果讓我們自己設(shè)計(jì)一個(gè)實(shí)時(shí)計(jì)算系統(tǒng),我們要解決哪些問(wèn)題。
(1)低延遲:都說(shuō)了是實(shí)時(shí)計(jì)算系統(tǒng)了,延遲是一定要低的。
(2)高性能:性能不高就是浪費(fèi)機(jī)器,浪費(fèi)機(jī)器是要受批評(píng)的哦。
(3)分布式:系統(tǒng)都是為應(yīng)用場(chǎng)景而生的,如果你的應(yīng)用場(chǎng)景、你的數(shù)據(jù)和計(jì)算單機(jī)就能搞定,那么不用考慮這些復(fù)雜的問(wèn)題了。我們所說(shuō)的是單機(jī)搞不定的情況。
(4)可擴(kuò)展:伴隨著業(yè)務(wù)的發(fā)展,我們的數(shù)據(jù)量、計(jì)算量可能會(huì)越來(lái)越大,所以希望這個(gè)系統(tǒng)是可擴(kuò)展的。
(5)容錯(cuò):這是分布式系統(tǒng)中通用問(wèn)題。一個(gè)節(jié)點(diǎn)掛了不能影響我的應(yīng)用。
(6)通信:設(shè)計(jì)的系統(tǒng)需要應(yīng)用程序開(kāi)發(fā)人員考慮各個(gè)處理組件的分布、消息的傳遞嗎?如果是,發(fā)人員可能會(huì)用不好,也不會(huì)想去用。
(7)消息不丟失:用戶發(fā)布的一個(gè)寶貝消息不能在實(shí)時(shí)處理的時(shí)候給丟了,對(duì)吧?
4、離線計(jì)算是什么?
離線計(jì)算:批量獲取數(shù)據(jù)、批量傳輸數(shù)據(jù)、周期性批量計(jì)算數(shù)據(jù)、數(shù)據(jù)展示 代表技術(shù):Sqoop批量導(dǎo)入數(shù)據(jù)、HDFS批量存儲(chǔ)數(shù)據(jù)、MapReduce批量計(jì)算數(shù)據(jù)、Hive批量計(jì)算數(shù)據(jù)、***任務(wù)調(diào)度日常業(yè)務(wù):
1,hivesql
2、調(diào)度平臺(tái)
3、Hadoop集群運(yùn)維
4、數(shù)據(jù)清洗(腳本語(yǔ)言)
5、元數(shù)據(jù)管理
6、數(shù)據(jù)稽查
7、數(shù)據(jù)倉(cāng)庫(kù)模型架構(gòu)
5、流式計(jì)算是什么
流式計(jì)算:數(shù)據(jù)實(shí)時(shí)產(chǎn)生、數(shù)據(jù)實(shí)時(shí)傳輸、數(shù)據(jù)實(shí)時(shí)計(jì)算、實(shí)時(shí)展示 代表技術(shù):Flume實(shí)時(shí)獲取數(shù)據(jù)、Kafka/metaq實(shí)時(shí)數(shù)據(jù)存儲(chǔ)、Storm/JStorm實(shí)時(shí)數(shù)據(jù)計(jì)算、Redis實(shí)時(shí)結(jié)果緩存、持久化存儲(chǔ)(mysql)。 一句話總結(jié):將源源不斷產(chǎn)生的數(shù)據(jù)實(shí)時(shí)收集并實(shí)時(shí)計(jì)算,盡可能快的得到計(jì)算結(jié)果,用來(lái)支持決策。6、離線計(jì)算與實(shí)時(shí)計(jì)算的區(qū)別
最大的區(qū)別:實(shí)時(shí)收集、實(shí)時(shí)計(jì)算、實(shí)時(shí)展示離線計(jì)算,一次計(jì)算很多條數(shù)據(jù)
實(shí)時(shí)計(jì)算,數(shù)據(jù)被一條一條的計(jì)算
7、Storm是什么?
Storm用來(lái)實(shí)時(shí)處理數(shù)據(jù),特點(diǎn):低延遲、高可用、分布式、可擴(kuò)展、數(shù)據(jù)不丟失。提供簡(jiǎn)單容易理解的接口,便于開(kāi)發(fā)。Spout Bolt
數(shù)據(jù)輸入 數(shù)據(jù)計(jì)算 數(shù)據(jù)輸出 數(shù)據(jù)計(jì)算 數(shù)據(jù)輸出
Spout Bolt 1…. Bolt N BoltN+1. BoltN….
8、Storm的應(yīng)用場(chǎng)景
Storm處理數(shù)據(jù)的方式是基于消息的流水線處理, 因此特別適合無(wú)狀態(tài)計(jì)算,也就是計(jì)算單元的依賴的數(shù)據(jù)全部在接受的消息中可以找到, 并且最好一個(gè)數(shù)據(jù)流不依賴另外一個(gè)數(shù)據(jù)流。
因此,常常用于
- 日志分析,從海量日志中分析出特定的數(shù)據(jù),并將分析的結(jié)果存入外部存儲(chǔ)器用來(lái)輔佐決策。
- 管道系統(tǒng), 將一個(gè)數(shù)據(jù)從一個(gè)系統(tǒng)傳輸?shù)搅硗庖粋€(gè)系統(tǒng), 比如將數(shù)據(jù)庫(kù)同步到Hadoop
- 消息轉(zhuǎn)化器, 將接受到的消息按照某種格式進(jìn)行轉(zhuǎn)化,存儲(chǔ)到另外一個(gè)系統(tǒng)如消息中間件
- 統(tǒng)計(jì)分析器, 從日志或消息中,提煉出某個(gè)字段,然后做count或sum計(jì)算,最后將統(tǒng)計(jì)值存入外部存儲(chǔ)器。中間處理過(guò)程可能更復(fù)雜。
8.1、案列:一淘-實(shí)時(shí)分析系統(tǒng)
一淘-實(shí)時(shí)分析系統(tǒng):實(shí)時(shí)分析用戶的屬性,并反饋給搜索引擎。最初,用戶屬性分析是通過(guò)每天在云梯上定時(shí)運(yùn)行的MR job來(lái)完成的。為了滿足實(shí)時(shí)性的要求,希望能夠?qū)崟r(shí)分析用戶的行為日志,將最新的用戶屬性反饋給搜索引擎,能夠?yàn)橛脩粽宫F(xiàn)最貼近其當(dāng)前需求的結(jié)果。
8.2、案列:攜程-網(wǎng)站性能監(jiān)控
攜程-網(wǎng)站性能監(jiān)控:實(shí)時(shí)分析系統(tǒng)監(jiān)控?cái)y程網(wǎng)的網(wǎng)站性能。利用HTML5獲得可用的指標(biāo),并記錄日志。Storm集群實(shí)時(shí)分析日志和入庫(kù)。使用DRPC聚合成報(bào)表,通過(guò)歷史數(shù)據(jù)對(duì)比等判斷規(guī)則,觸發(fā)預(yù)警事件。
8.3、案列:游戲?qū)崟r(shí)運(yùn)營(yíng)
一個(gè)游戲新版本上線,有一個(gè)實(shí)時(shí)分析系統(tǒng),收集游戲中的數(shù)據(jù),運(yùn)營(yíng)或者開(kāi)發(fā)者可以在上線后幾秒鐘得到持續(xù)不斷更新的游戲監(jiān)控報(bào)告和分析結(jié)果,然后馬上針對(duì)游戲的參數(shù) 和平衡性進(jìn)行調(diào)整。這樣就能夠大大縮短游戲迭代周期,加強(qiáng)游戲的生命力。
8.4、案列:實(shí)時(shí)計(jì)算在騰訊的運(yùn)用
實(shí)時(shí)計(jì)算在騰訊的運(yùn)用:精準(zhǔn)推薦(廣點(diǎn)通廣告推薦、新聞推薦、視頻推薦、游戲道具推薦);實(shí)時(shí)分析(微信運(yùn)營(yíng)數(shù)據(jù)門(mén)戶、效果統(tǒng)計(jì)、訂單畫(huà)像分析);實(shí)時(shí)監(jiān)控(實(shí)時(shí)監(jiān)控平臺(tái)、游戲內(nèi)接口調(diào)用)
8.5、案列:實(shí)時(shí)計(jì)算在阿里的運(yùn)用
為了更加精準(zhǔn)投放廣告,阿里媽媽后臺(tái)計(jì)算引擎需要維護(hù)每個(gè)用戶的興趣點(diǎn)(理想狀態(tài)是,你對(duì)什么感興趣,就向你投放哪類(lèi)廣告)。用戶興趣主要基于用戶的歷史行為、用戶的實(shí)時(shí)查詢、用戶的實(shí)時(shí)點(diǎn)擊、用戶的地理信息而得,其中實(shí)時(shí)查詢、實(shí)時(shí)點(diǎn)擊等用戶行為都是實(shí)時(shí)數(shù)據(jù)。考慮到系統(tǒng)的實(shí)時(shí)性,阿里媽媽使用Storm維護(hù)用戶興趣數(shù)據(jù),并在此基礎(chǔ)上進(jìn)行受眾定向的廣告投放。
9、Storm在互聯(lián)網(wǎng)公司
本節(jié)內(nèi)容來(lái)自《Storm技術(shù)內(nèi)幕與大數(shù)據(jù)實(shí)踐》,并得到作者授權(quán)使用。
11.Strom框架如何獲取數(shù)據(jù)
Hadoop MapReduce(TextInputFormat\Map\Reduce\TextOutputFormat),由TextInputFormat獲取數(shù)據(jù)。
Strom中如何獲取?
答:Spout去獲取數(shù)據(jù)。
Spout去哪里拿數(shù)據(jù)?數(shù)據(jù)在哪里?
答:數(shù)據(jù)在數(shù)據(jù)庫(kù)中,在文件中,在redis中,在任何存儲(chǔ)數(shù)據(jù)的地方。假設(shè)存儲(chǔ)文件中,1G,Spout一行一行的讀取文件中的數(shù)據(jù),是在實(shí)時(shí)讀取數(shù)據(jù)。
注意:只有數(shù)據(jù)實(shí)時(shí)產(chǎn)生,并實(shí)時(shí)獲取才能讓storm實(shí)時(shí)計(jì)算框架產(chǎn)生最大的效益。
12 Storm框架如何實(shí)時(shí)處理數(shù)據(jù)
Hadoop MapReduce(TextInputFormat\Map\Reduce\TextOutputFormat),其中Map\Reduce是計(jì)算數(shù)據(jù)。
storm中如何計(jì)算數(shù)據(jù)?
答:在Bolt中進(jìn)行相關(guān)業(yè)務(wù)邏輯的計(jì)算。
strorm中如果有多個(gè)階段的業(yè)務(wù)邏輯需要計(jì)算,怎么計(jì)算?
答:Bolt1(Map1)—>Bolt2(Reduce1)—>Bolt3(Map1)—>Bolt4(Reduce)
5、Storm的編程模型是什么?
答:Spout—>Bolt1—>Bolt2—>Bolt3
| 獲取數(shù)據(jù) | 計(jì)算 | 計(jì)算 | 計(jì)算 |
13 Storm架構(gòu)圖
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的線程稱為一個(gè)task. 在storm0.8之后,task不再與物理線程對(duì)應(yīng),同一個(gè)spout/bolt的task可能會(huì)共享一個(gè)物理線程,該線程稱為executor。
14.Storm編程模型
Topology: Storm中運(yùn)行的一個(gè)實(shí)時(shí)應(yīng)用程序,因?yàn)楦鱾€(gè)組件間的消息流動(dòng)形成邏輯上的一個(gè)拓?fù)浣Y(jié)構(gòu)。
Spout:在一個(gè)topology中產(chǎn)生源數(shù)據(jù)流的組件。通常情況下spout會(huì)從外部數(shù)據(jù)源中讀取數(shù)據(jù),然后轉(zhuǎn)換為topology內(nèi)部的源數(shù)據(jù)。Spout是一個(gè)主動(dòng)的角色,其接口中有個(gè)nextTuple()函數(shù),storm框架會(huì)不停地調(diào)用此函數(shù),用戶只要在其中生成源數(shù)據(jù)即可。
Bolt:在一個(gè)topology中接受數(shù)據(jù)然后執(zhí)行處理的組件。Bolt可以執(zhí)行過(guò)濾、函數(shù)操作、合并、寫(xiě)數(shù)據(jù)庫(kù)等任何操作。Bolt是一個(gè)被動(dòng)的角色,其接口中有個(gè)execute(Tuple input)函數(shù),在接受到消息后會(huì)調(diào)用此函數(shù),用戶可以在其中執(zhí)行自己想要的操作。
Tuple:一次消息傳遞的基本單元。本來(lái)應(yīng)該是一個(gè)key-value的map,但是由于各個(gè)組件間傳遞的tuple的字段名稱已經(jīng)事先定義好,所以tuple中只要按序填入各個(gè)value就行了,所以就是一個(gè)value list.
Stream: 源源不斷傳遞的tuple就組成了stream。
總結(jié)
以上是生活随笔為你收集整理的流式计算strom,Strom解决的问题,实现实时计算系统要解决那些问题,离线计算是什么,流式计算什么,离线和实时计算区别,strom应用场景,Strorm架构图和编程模型(来自学习资料)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 明星人气榜排名前十(明星人气排名表)
- 下一篇: 婚外情人如何相处才能长久一点(婚外情人如