1. 程式人生 > >流式大資料處理的三種框架:Storm,Spark和Samza

流式大資料處理的三種框架:Storm,Spark和Samza

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

Apache Storm

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


Apache Spark

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


Apache Samza

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


共同之處

以上三種實時計算系統都是開源的分散式系統,具有低延遲、可擴充套件和容錯性諸多優點,它們的共同特色在於:允許你在執行資料流程式碼時,將任務分配到一系列具有容錯能力的計算機上並行執行。此外,它們都提供了簡單的API來簡化底層實現的複雜程度。

三種框架的術語名詞不同,但是其代表的概念十分相似:


對比圖

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


資料傳遞形式分為三大類:

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

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

用例

這三種框架在處理連續性的大量實時資料時的表現均出色而高效,那麼使用哪一種呢?選擇時並沒有什麼硬性規定,最多就是幾個指導方針。

如果你想要的是一個允許增量計算的高速事件處理系統,Storm會是最佳選擇。它可以應對你在客戶端等待結果的同時,進一步進行分散式計算的需求,使用開箱即用的分散式RPC(DRPC)就可以了。最後但同樣重要的原因:Storm使用Apache Thrift,你可以用任何程式語言來編寫拓撲結構。如果你需要狀態持續,同時/或者達到恰好一次的傳遞效果,應當看看更高層面的Trdent API,它同時也提供了微批處理的方式。


使用Storm的公司有:Twitter,雅虎,Spotify還有The Weather Channel等。

說到微批處理,如果你必須有狀態的計算,恰好一次的遞送,並且不介意高延遲的話,那麼可以考慮Spark Streaming,特別如果你還計劃圖形操作、機器學習或者訪問SQL的話,Apache Spark的stack允許你將一些library與資料流相結合(Spark SQL,Mllib,GraphX),它們會提供便捷的一體化程式設計模型。尤其是資料流演算法(例如:K均值流媒體)允許Spark實時決策的促進。

使用Spark的公司有:亞馬遜,雅虎,NASA JPL,eBay還有百度等。

如果你有大量的狀態需要處理,比如每個分割槽都有許多十億位元組,那麼可以選擇Samza。由於Samza將儲存與處理放在同一臺機器上,在保持處理高效的同時,還不會額外載入記憶體。這種框架提供了靈活的可插拔API:它的預設execution、訊息傳送還有儲存引擎操作都可以根據你的選擇隨時進行替換。此外,如果你有大量的資料流處理階段,且分別來自不同程式碼庫的不同團隊,那麼Samza的細顆粒工作特性會尤其適用,因為它們可以在影響最小化的前提下完成增加或移除的工作。

使用Samza的公司有:LinkedIn,Intuit,Metamarkets,Quantiply,Fortscale等。

結論

本文中我們只對這三種Apache框架進行了簡單的瞭解,並未覆蓋到這些框架中大量的功能與更多細微的差異。同時,文中這三種框架對比也是受到限制的,因為這些框架都在一直不斷的發展,這一點是我們應當牢記的。

相關推薦

資料處理 (實時)的框架StormSparkSamza

摘要:許多分散式計算系統都可以實時或接近實時地處理大資料流。本文將對Storm、Spark和Samza等三種Apache框架分別進行簡單介紹,然後嘗試快速、高度概述其異同。 許多分散式計算系統都可以實時或接近實時地處理大資料流。本文將對三種Apache框架分別進行簡單介紹,

資料處理框架StormSparkSamza

許多分散式計算系統都可以實時或接近實時地處理大資料流。本文將對三種Apache框架分別進行簡單介紹,然後嘗試快速、高度概述其異同。Apache Storm在Storm中,先要設計一個用於實時計算的圖狀結構,我們稱之為拓撲(topology)。這個拓撲將會被提交給叢集,由叢集中

[BigData]資料處理框架StormSparkSamza

許多分散式計算系統都可以實時或接近實時地處理大資料流。本文將對三種Apache框架分別進行簡單介紹,然後嘗試快速、高度概述其異同。 Apache Storm 在Storm中,先要設計一個用於實時計算的圖狀結構,我們稱之為拓撲(topology)。這個拓撲將會被提交給叢集,由叢集中的主控節點(maste

資料處理框架StormSparkFlink

storm、spark streaming、flink都是開源的分散式系統,具有低延遲、可擴充套件和容錯性諸多優點,允許你在執行資料流程式碼時,將任務分配到一系列具有容錯能力的計算機上並行執行,都提供

處理大數據常用的Apache框架StormSparkSamza。(主要介紹Storm)

領導 hdf 客戶端 orm 至少 per yar 持續性 apache 處理實時的大數據流最常用的就是分布式計算系統,下面分別介紹Apache中處理大數據流的三大框架: Apache Storm 這是一個分布式實時大數據處理系統。Storm設計用於在容錯和

storm資料處理流行嗎

在如今這個資訊高速增長的今天,資訊實時計算處理能力已經是一項專業技能了,正是因為有了這些需求的存在才使得分散式,同時具備高容錯的實時計算系統Storm才變得如此受歡迎,為什麼這麼說呢?下面看看新霸哥的介紹。   優點之一:高可靠性   對Storm有了解的朋友可能會知道sp

Java 的迴圈foreachIterator classic for loop

不得不說,java語言在提供了這三種迴圈方式帶來靈活性的同時,同時也將一些“混亂”引入了進來。 這裡的“混亂”並不是真正意義上的混亂,而是由於沒有統一的風格而帶來使用習慣的問題——想象一下,如果同一個專案中這三種都有人用,閱讀起來真是五味雜陳啊。 有人要問了,那麼,這三種

資料計算實踐(2)----Hadoop叢集Zookeeper

一、前言 1、上一文搭建好了Hadoop單機模式,這一文繼續搭建Hadoop叢集 二、搭建Hadoop叢集 1、根據上文的流程得到兩臺單機模式的機器,並保證兩臺單機模式正常啟動,記得第二臺機器core-site.xml內的fs.defaultFS引數值要改成本機的來啟動,啟動完畢後再改回來 2、清空資

資料計算實踐(3)----高可用的Hadoop叢集

流式大資料計算實踐(3)----高可用的Hadoop叢集 一、前言 1、上文中我們已經搭建好了Hadoop和Zookeeper的叢集,這一文來將Hadoop叢集變得高可用 2、由於Hadoop叢集是主從節點的模式,如果叢集中的namenode主節點掛掉,那麼叢集就會癱瘓,所以我們要改造成

資料計算實踐(7)----Hive安裝

一、前言 1、這一文學習使用Hive 二、Hive介紹與安裝 Hive介紹:Hive是基於Hadoop的一個數據倉庫工具,可以通過HQL語句(類似SQL)來操作HDFS上面的資料,其原理就是將使用者寫的HQL語句轉換成MapReduce任務去執行,這樣不用開發者去寫繁瑣的MapReduce程式,直接編寫

資料計算實踐(5)----HBase使用

一、前言 1、上文中我們搭建好了一套HBase叢集環境,這一文我們學習一下HBase的基本操作和客戶端API的使用 二、shell操作 先通過命令進入HBase的命令列操作 /work/soft/hbase-1.2.2/bin/hbase shell 1、建表 create 'test

Ebay開源基於資料的視覺化框架Pulsar Reporting

作者:汪明明,王巧玲 ebay又新添了一個開源專案PulsarReporting – 基於大資料的視覺化框架 Pulsar作為一個實時和近實時大資料分析處理系統,包含了Pulsar Pipeline和Pulsar Reporting. 在今年三月, eBay Puls

資料許可權授權管理框架Apache SentryRanger

文章目錄 前言 Sentry和Ranger的概述 Sentry Sentry的架構模型 Sentry與Hadoop生態圈元件的整合 Ranger Ranger的架構模型 Ranger的策略配置

資料十)zookeeper叢集與kafka叢集部署

一、安裝Zookeeper 1.叢集規劃 在hadoop102、hadoop103和hadoop104三個節點上部署Zookeeper。 2.解壓安裝        1.解壓zookeeper安裝包到/usr/local/目錄下 tar -zxvf zookeepe

Java排序冒泡選擇插入排序

反序 三種 blog void bubble public string length 選擇 三種排序:冒泡,選擇,插入排序 public static void bubbleSort(int[] source){ // 交換

C++容器list、vectordeque的區別 2018/10/7

在寫C++程式的時候會發現STL是一個不錯的東西,減少了程式碼量,使程式碼的複用率大大提高,減輕了程式猿的負擔。還有一個就是容器,你會發現要是自己寫一個連結串列、佇列,或者是陣列的時候,既要花時間還要操心怎麼去維護,裡面的指標啊,記憶體夠不夠用啊,長度問題,有沒有可能溢位啊等

C++容器list、vectordeque的區別

           在寫C++程式的時候會發現STL是一個不錯的東西,減少了程式碼量,使程式碼的複用率大大提高,減輕了程式猿的負擔。還有一個就是容器,你會發現要是自己寫一個連結串列、佇列,或者是陣列的時候,既要花時間還要操心怎麼去維護,裡面的指標啊,記憶體夠不夠用啊,長

Android App的架構模式MVCMVPMVVM

http://www.2cto.com/kf/201506/405766.html MVC使用總結 利用MVC設計模式,使得這個天氣預報小專案有了很好的可擴充套件和維護性,當需要改變UI顯示的時候,無需修改Contronller(控制器)Activity的程式

MeasureSpec中模式UNSPECIFIEDAT_MOSTEXACTLY

在自定義View和ViewGroup的時候,我們經常會遇到int型的MeasureSpec來表示一個元件的大小,這個變數裡面不僅有元件的尺寸大小,還有大小的模式。 這個大小的模式,有點難以理解。在系統中元件的大小模式有三種: 1.精確模式(MeasureSpec.EXA

ORACLE資料庫的狀態RESTRICT、QUIESCESUSPEND

bash-2.03$ srvctl status db -d testracInstance testrac1 is running on node racnode1Instance testrac2 is running on node racnode2Instance testrac3 is runnin