流式传输大数据:Storm,Spark和Samza
有許多分布式計(jì)算系統(tǒng)可以實(shí)時(shí)或近實(shí)時(shí)處理大數(shù)據(jù)。 本文將從對三個(gè)Apache框架的簡短描述開始,并試圖對它們之間的某些相似之處和不同之處提供一個(gè)快速的高級概述。
阿帕奇風(fēng)暴
在風(fēng)暴 ,你設(shè)計(jì)要求的T opology實(shí)時(shí)計(jì)算的圖,然后喂到集群,其中主節(jié)點(diǎn)將分發(fā)工作節(jié)點(diǎn)來執(zhí)行它之間的代碼。 在拓?fù)渲?#xff0c;數(shù)據(jù)在噴口之間傳遞, 噴口以不可變的鍵值對集(稱為元組)的形式發(fā)射數(shù)據(jù)流,而螺栓則轉(zhuǎn)換這些流(計(jì)數(shù),過濾器等)。 螺栓本身可以選擇將數(shù)據(jù)發(fā)送到處理管道中的其他螺栓。
阿帕奇火花
Spark Streaming (Spark API的核心擴(kuò)展)不會像Storm那樣一次處理流。 相反,它將在處理它們之前將它們切成小批時(shí)間間隔。 連續(xù)數(shù)據(jù)流的Spark抽象稱為DStream (對于離散流 )。 DStream是RDD ( 彈性分布式數(shù)據(jù)集 )的微型批次。 RDD是分布式集合,可以通過任意功能和數(shù)據(jù)滑動窗口上的轉(zhuǎn)換( 窗口計(jì)算 )并行操作。
阿帕奇·薩姆扎(Apache Samza)
Samza的流式傳輸方法是在收到消息時(shí)一次處理一次。 Samza的流原語不是元組或Dstream ,而是消息 。 流被分成多個(gè)分區(qū) ,每個(gè)分區(qū)都是只讀消息的有序序列,每個(gè)消息具有唯一的ID( 偏移量 )。 該系統(tǒng)還支持批處理 ,即按順序使用來自同一流分區(qū)的多個(gè)消息。 盡管Samza通常依賴于Hadoop的YARN ( 另一個(gè)資源協(xié)商者 )和Apache Kafka ,但Samza的執(zhí)行和流模塊都可以插入。
共同點(diǎn)
所有這三個(gè)實(shí)時(shí)計(jì)算系統(tǒng)都是開源, 低延遲 , 分布式,可伸縮和容錯(cuò)的 。 它們都使您能夠通過跨具有故障轉(zhuǎn)移功能的計(jì)算機(jī)集群中分布的并行任務(wù)來運(yùn)行流處理代碼。 它們還提供了簡單的API,以抽象出底層實(shí)現(xiàn)的復(fù)雜性。
這三個(gè)框架針對相似的概念使用不同的詞匯表:
比較矩陣
下表總結(jié)了一些區(qū)別:
交付模式一般分為三類:
另一方面是狀態(tài)管理 。 存儲狀態(tài)有不同的策略。 Spark Streaming將數(shù)據(jù)寫入分布式文件系統(tǒng)(例如HDFS)。 Samza使用嵌入式鍵值存儲。 使用Storm,您將不得不在應(yīng)用程序?qū)訚L動自己的狀態(tài)管理,或者使用稱為Trident的更高級別的抽象。
用例
這三個(gè)框架特別適合于有效處理連續(xù)的大量實(shí)時(shí)數(shù)據(jù)。 那么使用哪一個(gè)呢? 沒有硬性規(guī)定,最多只有一些通用準(zhǔn)則。
如果您想要一個(gè)允許增量計(jì)算的高速事件處理系統(tǒng), Storm將會很合適。 如果您進(jìn)一步需要按需運(yùn)行分布式計(jì)算,而客戶端正在同步等待結(jié)果,則可以直接使用分布式RPC (DRPC)。 最后但并非最不重要的一點(diǎn),因?yàn)镾torm使用Apache Thrift ,所以您可以用任何編程語言編寫拓?fù)洹?但是,如果您需要狀態(tài)持久性和/或僅一次交付,則應(yīng)查看更高級別的Trident API,該API還提供了微分批處理。
一些使用Storm的公司: Twitter,Yahoo!,Spotify,天氣頻道 。
說到微批處理,如果您必須有狀態(tài)的計(jì)算,一次發(fā)送并且不介意更高的延遲,則可以考慮使用Spark Streaming……特別是如果您還計(jì)劃進(jìn)行圖形操作,機(jī)器學(xué)習(xí)或SQL訪問。 Apache Spark堆棧使您可以將多個(gè)庫與流( Spark SQL , MLlib , GraphX )結(jié)合起來,并提供方便的統(tǒng)一編程模型。 特別是, 流算法 (例如,流k均值 )使Spark可以實(shí)時(shí)進(jìn)行決策。
一些使用Spark的公司: Amazon,Yahoo!,NASA JPL,eBay Inc.,百度…
如果您要處理的狀態(tài)很多(例如,每個(gè)分區(qū)有許多GB), Samza會將存儲和處理放在同一臺機(jī)器上,從而可以有效地處理內(nèi)存中無法容納的狀態(tài)。 該框架還通過其可插拔 API提供了靈活性:默認(rèn)執(zhí)行,消息傳遞和存儲引擎都可以用您選擇的替代方案來代替。 此外,如果您有來自不同團(tuán)隊(duì),具有不同代碼庫的多個(gè)數(shù)據(jù)處理階段,則Samza的細(xì)粒度作業(yè)將特別適合,因?yàn)榭梢栽谔砑踊騽h除它們的同時(shí)將漣漪效應(yīng)降至最低。
一些使用Samza的公司: LinkedIn,Intuit,Metamarkets,Quantiply,Fortscale…
結(jié)論
我們只刮過《三個(gè)阿帕奇人》的表面。 我們沒有涵蓋其他許多功能,以及這些框架之間的細(xì)微差別。 另外,重要的是要牢記上述比較的局限性,因?yàn)檫@些系統(tǒng)在不斷發(fā)展。
翻譯自: https://www.javacodegeeks.com/2015/02/streaming-big-data-storm-spark-samza.html
總結(jié)
以上是生活随笔為你收集整理的流式传输大数据:Storm,Spark和Samza的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: rog超杀和三星g7哪个好(华硕超杀对比
- 下一篇: 默认方法和多重继承