一、可能很多初學(xué)大數(shù)據(jù)的伙伴不知道strom是什么胚吁,先給大家介紹一下strom:
分布式實(shí)時(shí)計(jì)算系統(tǒng)牙躺,storm對(duì)于實(shí)時(shí)計(jì)算的意義類(lèi)似于hadoop對(duì)于批處理的意義。
storm的適用場(chǎng)景腕扶。
流數(shù)據(jù)處理孽拷。Storm可以用來(lái)處理源源不斷流進(jìn)來(lái)的消息,處理之后將結(jié)果寫(xiě)入到某個(gè)存儲(chǔ)中去半抱。
分布式rpc乓搬。由于storm的處理組件是分布式的思犁,而且處理延遲極低,所以可以作為一個(gè)通用的分布式rpc框架來(lái)使用进肯。當(dāng)然激蹲,其實(shí)我們的搜索引擎本身也是一個(gè)分布式rpc系統(tǒng)
二、然后我們?cè)倏聪耂torm江掩、Spark学辱、 Hadoop都有何特點(diǎn)
Storm: 分布式實(shí)時(shí)計(jì)算,強(qiáng)調(diào)實(shí)時(shí)性环形,常用于實(shí)時(shí)性要求較高的地方策泣;
Hadoop:分布式批處理計(jì)算,強(qiáng)調(diào)批處理抬吟,常用于數(shù)據(jù)挖掘萨咕、分析;
Spark:是一個(gè)基于內(nèi)存計(jì)算的開(kāi)源的集群計(jì)算系統(tǒng)火本,目的是讓數(shù)據(jù)分析更加快速, Spark 是一種與 Hadoop 相似的開(kāi)源集群計(jì)算環(huán)境危队,但是兩者之間還存在一些不同之處,這些有用的不同之處使 Spark 在某些工作負(fù)載方面表現(xiàn)得更加優(yōu)越钙畔,換句話(huà)說(shuō)茫陆,Spark 啟用了內(nèi)存分布數(shù)據(jù)集,除了能夠提供交互式查詢(xún)外擎析,它還可以?xún)?yōu)化迭代工作負(fù)載簿盅。
三、strom的優(yōu)勢(shì)
1. 簡(jiǎn)單編程
在大數(shù)據(jù)處理方面相信大家對(duì)hadoop已經(jīng)耳熟能詳揍魂,基于GoogleMap/Reduce來(lái)實(shí)現(xiàn)的Hadoop為開(kāi)發(fā)者提供了map桨醋、reduce原語(yǔ),使并行批處理程序變得非常地簡(jiǎn)單和優(yōu)美现斋。同樣讨盒,Storm也為大數(shù)據(jù)的實(shí)時(shí)計(jì)算提供了一些簡(jiǎn)單優(yōu)美的原語(yǔ),這大大降低了開(kāi)發(fā)并行實(shí)時(shí)處理的任務(wù)的復(fù)雜性步责,幫助你快速返顺、高效的開(kāi)發(fā)應(yīng)用。
Spark提供的數(shù)據(jù)集操作類(lèi)型有很多種蔓肯,不像Hadoop只提供了Map和Reduce兩種操作遂鹊。比如map,filter, flatMap,sample, groupByKey, reduceByKey, union, join, cogroup,mapValues, sort,partionBy等多種操作類(lèi)型,他們把這些操作稱(chēng)為T(mén)ransformations蔗包。同時(shí)還提供Count, collect, reduce, lookup, save等多種actions秉扑。這些多種多樣的數(shù)據(jù)集操作類(lèi)型,給上層應(yīng)用者提供了方便。各個(gè)處理節(jié)點(diǎn)之間的通信模型不再像Hadoop那樣就是唯一的Data Shuffle一種模式舟陆。用戶(hù)可以命名误澳,物化,控制中間結(jié)果的分區(qū)等秦躯∫湮剑可以說(shuō)編程模型比Hadoop更靈活.。
2. 多語(yǔ)言支持
除了用java實(shí)現(xiàn)spout和bolt踱承,你還可以使用任何你熟悉的編程語(yǔ)言來(lái)完成這項(xiàng)工作倡缠,這一切得益于Storm所謂的多語(yǔ)言協(xié)議。多語(yǔ)言協(xié)議是Storm內(nèi)部的一種特殊協(xié)議茎活,允許spout或者bolt使用標(biāo)準(zhǔn)輸入和標(biāo)準(zhǔn)輸出來(lái)進(jìn)行消息傳遞昙沦,傳遞的消息為單行文本或者是json編碼的多行。
Storm支持多語(yǔ)言編程主要是通過(guò)ShellBolt载荔,ShellSpout和ShellProcess這些類(lèi)來(lái)實(shí)現(xiàn)的盾饮,這些類(lèi)都實(shí)現(xiàn)了IBolt 和 ISpout接口,以及讓shell通過(guò)java的ProcessBuilder類(lèi)來(lái)執(zhí)行腳本或者程序的協(xié)議懒熙。
可以看到丘损,采用這種方式,每個(gè)tuple在處理的時(shí)候都需要進(jìn)行json的編解碼煌珊,因此在吞吐量上會(huì)有較大影響。
3. 支持水平擴(kuò)展
在Storm集群中真正運(yùn)行topology的主要有三個(gè)實(shí)體:工作進(jìn)程泌豆、線(xiàn)程和任務(wù)定庵。Storm集群中的每臺(tái)機(jī)器上都可以運(yùn)行多個(gè)工作進(jìn)程,每個(gè)工作進(jìn)程又可創(chuàng)建多個(gè)線(xiàn)程踪危,每個(gè)線(xiàn)程可以執(zhí)行多個(gè)任務(wù)蔬浙,任務(wù)是真正進(jìn)行數(shù)據(jù)處理的實(shí)體,我們開(kāi)發(fā)的spout贞远、bolt就是作為一個(gè)或者多個(gè)任務(wù)的方式執(zhí)行的畴博。
因此,計(jì)算任務(wù)在多個(gè)線(xiàn)程蓝仲、進(jìn)程和服務(wù)器之間并行進(jìn)行俱病,支持靈活的水平擴(kuò)展。
4. 容錯(cuò)性強(qiáng)
如果在消息處理過(guò)程中出了一些異常袱结,Storm會(huì)重新安排這個(gè)出問(wèn)題的處理單元亮隙。Storm保證一個(gè)處理單元永遠(yuǎn)運(yùn)行(除非你顯式殺掉這個(gè)處理單元)。
5. 可靠的消息保證
Storm可以保證spout發(fā)出的每條消息都能被“完全處理”垢夹,這也是直接區(qū)別于其他實(shí)時(shí)系統(tǒng)的地方溢吻,如S4。
6. 快速的消息處理
用ZeroMQ作為底層消息隊(duì)列, 保證消息能快速被處理
7. 本地模式果元,支持快速編程測(cè)試
Storm有一種“本地模式”促王,也就是在進(jìn)程中模擬一個(gè)Storm集群的所有功能犀盟,以本地模式運(yùn)行topology跟在集群上運(yùn)行topology類(lèi)似,這對(duì)于我們開(kāi)發(fā)和測(cè)試來(lái)說(shuō)非常有用蝇狼。