1. 程式人生 > >最主流的五個大資料處理框架的優勢對比

最主流的五個大資料處理框架的優勢對比

我深入分析了五個大資料處理框架:Hadoop,Spark,Flink,Storm,Samaza

  • Hadoop

頂尖的框架之一,大資料的代名詞。Hadoop,MapReduce,以及其生態系統和相關的技術,比如Pig,Hive,Flume,HDFS等。Hadoop是第一個,在工業界被廣泛採用。為什麼仍然使用Hadoop。儘管Hadoop被用來處理複雜資料,其本身其實相當簡單。如果你的資料可以批量處理,可以被分割成小的處理任務,分發到計算叢集,然後綜合計算結果,並且整個過程都邏輯清晰,那麼你的資料很可能適合用Hadoop處理。

Hadoop生態系統裡有些工具的用途超出了當初作為支援MapReduce演算法的範疇。一個值得注意的就是YARN,Hadoop的資源管理層。它可以用在Hadoop之外,比如用於Spark。

  • Spark

Spark是大資料處理王國的王位繼承人。Spark和Hadoop經常被放到二選一的位置,但並不是非要這樣的。Hadoop的生態系統可以容納Spark的處理引擎,用來替代MapReduce,由此產生各種由兩個生態系統的工具混合起來的環境。 總的來說,Spark採用更先進的架構,使得靈活性、易用性、效能等方面都比Hadoop更有優勢,有取代Hadoop的趨勢,但其穩定性有待進一步提高。我總結,具體表現在如下幾個方面:

框架:

  • Hadoop:MapRedcue由Map和Reduce兩個階段,並通過shuffle將兩個階段連線起來的。但是套用MapReduce模型解決問題,不得不將問題分解為若干個有依賴關係的子問題,每個子問題對應一個MapReduce作業,最終所有這些作業形成一個DAG。
  • Spark:是通用的DAG框架,可以將多個有依賴關係的作業轉換為一個大的DAG。核心思想是將Map和Reduce兩個操作進一步拆分為多個元操作,這些元操作可以靈活組合,產生新的操作,並經過一些控制程式組裝後形成一個大的DAG作業。

中間計算結果處理:

  • Hadoop:在DAG中,由於有多個MapReduce作業組成,每個作業都會從HDFS上讀取一次資料和寫一次資料(預設寫三份),即使這些MapReduce作業產生的資料是中間資料也需要寫HDFS。這種表達作業依賴關係的方式比較低效,會浪費大量不必要的磁碟和網路IO,根本原因是作業之間產生的資料不是直接流動的,而是藉助HDFS作為共享資料儲存系統。
  • Spark:在Spark中,使用記憶體(記憶體不夠使用本地磁碟)替代了使用HDFS儲存中間結果。對於迭代運算效率更高。
    一個具體的例子,大資料巨頭Cloudera如今在把MapReduce替換為Spark。另一個例子,Spark不包含自身的分散式儲存層,這樣它可以利用Hadoop的分散式檔案系統(HDFS),或跟Hadoop無關的,比如Mesos。
  • Flink

資料流引擎。目標是提供針對資料流的計算工具。把批量處理作為資料流的特殊情形,Flink既是批處理又是實時處理框架,但流處理還是放在第一位的。Flink提供了一系列API,包括針對Java和Scala的流API,針對Java,Scala,Python的靜態資料API,以及在Java和Scala中嵌入SQL查詢的程式碼。它也自帶機器學習和影象處理包。Flink還有一系列額外特性:

  1. 高效能、低延遲
  2. 支援有序和亂序事件
  3. 針對有狀態計算的僅限一次語義
  4. Backpressure連續流模型
  5. 通過輕量級分散式快照做容錯
  6. 選Flink而不選Spark?Flink真的是面向流的。Spark是批處理的,儘管它可以通過縮減每次處理的事件來模擬流的效果,但畢竟不如Flink。如果你要處理真正的實時資料,Spark是不行的,得用Flink。
  • Storm

分散式計算框架,其應用被設計成有向無環圖。被設計成容易處理無限流,並且可用於任何程式語言。每個節點每秒處理上百萬個元組,高度可伸縮,提供任務處理保證。用Clojure寫的。可用於實時分析,分散式機器學習,以及大量別的情形,特別是資料流大的。Storm可以執行在YARN上,整合到Hadoop生態系統中。五個特徵:

  1. 可伸縮
  2. 容錯
  3. 可靠
  4. 易操作
  5. 不支援批處理。不支援有狀態的管理(可以用Trident)。
  • Samza

訊息傳遞基於Apache Kafka, 叢集資源管理基於YARN。特性:

  1. 簡單API
  2. 狀態管理
  3. 容錯
  4. 可持續
  5. 可伸縮
  6. 可插拔
  7. 處理器隔離