三個大數據處理框架:Storm,Spark和Samza 介紹比較

轉自:http://www.open-open.com/lib/view/open1426065900123.html

許多分佈式計算系統均可以實時或接近實時地處理大數據流。本文將對三種Apache框架分別進行簡單介紹,而後嘗試快速、高度概述其異同。

Apache Stormhtml

Storm中, 先要設計一個用於實時計算的圖狀結構,咱們稱之爲拓撲(topology)。這個拓撲將會被提交給集羣,由集羣中的主控節點(master node)分發代碼,將任務分配給工做節點(worker node)執行。一個拓撲中包括spout和bolt兩種角色,其中spout發送消息,負責將數據流以tuple元組的形式發送出去;而bolt則負責 轉換這些數據流,在bolt中能夠完成計算、過濾等操做,bolt自身也能夠隨機將數據發送給其餘bolt。由spout發射出的tuple是不可變數 組,對應着固定的鍵值對。node

Storm的流處理可對框架中名爲Topology(拓撲)的DAG(Directed Acyclic Graph,有向無環圖)進行編排。這些拓撲描述了當數據片斷進入系統後,須要對每一個傳入的片斷執行的不一樣轉換或步驟。apache

三個大數據處理框架:Storm,Spark和Samza 介紹比較

 

Apache Spark框架

Spark Streaming是 核心Spark API的一個擴展,它並不會像Storm那樣一次一個地處理數據流,而是在處理前按時間間隔預先將其切分爲一段一段的批處理做業。Spark針對持續性數 據流的抽象稱爲DStream(DiscretizedStream),一個DStream是一個微批處理(micro-batching)的RDD(彈 性分佈式數據集);而RDD則是一種分佈式數據集,可以以兩種方式並行運做,分別是任意函數和滑動窗口數據的轉換。分佈式

三個大數據處理框架:Storm,Spark和Samza 介紹比較

 

Apache Samzaide

Samza處 理數據流時,會分別按次處理每條收到的消息。Samza的流單位既不是元組,也不是Dstream,而是一條條消息。在Samza中,數據流被切分開來, 每一個部分都由一組只讀消息的有序數列構成,而這些消息每條都有一個特定的ID(offset)。該系統還支持批處理,即逐次處理同一個數據流分區的多條消 息。Samza的執行與數據流模塊都是可插拔式的,儘管Samza的特點是依賴Hadoop的Yarn(另外一種資源調度器)和Apache Kafka。函數

三個大數據處理框架:Storm,Spark和Samza 介紹比較

Samza可使用以本地鍵值存儲方式實現的容錯檢查點系統存儲數據。這樣Samza便可得到「至少一次」的交付保障,但面對因爲數據可能屢次交付形成的失敗,該技術沒法對彙總後狀態(例如計數)提供精確恢復。oop

共同之處大數據

以上三種實時計算系統都是開源的分佈式系統,具備低延遲、可擴展和容錯性諸多優勢,它們的共同特點在於:容許你在運行數據流代碼時,將任務分配到一系列具備容錯能力的計算機上並行運行。此外,它們都提供了簡單的API來簡化底層實現的複雜程度。spa

三種框架的術語名詞不一樣,可是其表明的概念十分類似:

三個大數據處理框架:Storm,Spark和Samza 介紹比較

 

對比圖

下面表格總結了一些不一樣之處:

三個大數據處理框架:Storm,Spark和Samza 介紹比較

 

數據傳遞形式分爲三大類:

  1. 最多一次(At-most-once):消息可能會丟失,這一般是最不理想的結果。
  2. 最少一次(At-least-once):消息可能會再次發送(沒有丟失的狀況,可是會產生冗餘)。在許多用例中已經足夠。
  3. 剛好一次(Exactly-once):每條消息都被髮送過一次且僅僅一次(沒有丟失,沒有冗餘)。這是最佳狀況,儘管很難保證在全部用例中都實現。

另外一個方面是狀態管理:對狀態的存儲有不一樣的策略,Spark Streaming將數據寫入分佈式文件系統中(例如HDFS);Samza使用嵌入式鍵值存儲;而在Storm中,或者將狀態管理滾動至應用層面,或者使用更高層面的抽象Trident。

相關文章
相關標籤/搜索