我們一起聊聊大數據框架發展史
這幾年大數據的飛速發展,出現了很多熱門的開源社區,其中著名的有 Hadoop、Storm,以及后來的 Spark,他們都有著各自專注的應用場景。Spark 掀開了內存計算的先河,也以內存為賭注,贏得了內存計算的飛速發展。Spark 的火熱或多或少的掩蓋了其他分布式計算的系統身影。就像 Flink,也就在這個時候默默的發展著。
在國外一些社區,有很多人將大數據的計算引擎分成了 4 代,當然,也有很多人不會認同。我們先姑且這么認為和討論。
第1代——Hadoop MapReduce
首先第一代的計算引擎,無疑就是 Hadoop 承載的 MapReduce。它將計算分為兩個階段,分別為 Map 和 Reduce。對于上層應用來說,就不得不想方設法去拆分算法,甚至于不得不在上層應用實現多個 Job 的串聯,以完成一個完整的算法,例如迭代計算。
介紹
MapReduce是一種編程模型,用于大規模數據集(大于1TB)的并行運算。概念"Map(映射)"和"Reduce(歸約)",是它們的主要思想,都是從函數式編程語言里借來的,還有從矢量編程語言里借來的特性。它極大地方便了編程人員在不會分布式并行編程的情況下,將自己的程序運行在分布式系統上。當前的軟件實現是指定一個Map(映射)函數,用來把一組鍵值對映射成一組新的鍵值對,指定并發的Reduce(歸約)函數,用來保證所有映射的鍵值對中的每一個共享相同的鍵組。
- 批處理
- Mapper、Reducer
第2代——DAG框架(Tez) + MapReduce
由于這樣的弊端,催生了支持 DAG 框架的產生。因此,支持 DAG 的框架被劃分為第二代計算引擎。如 Tez 以及更上層的 Oozie。這里我們不去細究各種 DAG 實現之間的區別,不過對于當時的 Tez 和 Oozie 來說,大多還是批處理的任務。
介紹
Tez是Apache開源的支持DAG作業的計算框架,它直接源于MapReduce框架,核心思想是將Map和Reduce兩個操作進一步拆分,即Map被拆分成Input、Processor、Sort、Merge和Output, Reduce被拆分成Input、Shuffle、Sort、Merge、Processor和Output等,這樣,這些分解后的元操作可以任意靈活組合,產生新的操作,這些操作經過一些控制程序組裝后,可形成一個大的DAG作業。
- 批處理
- 1個Tez = MR(1) + MR(2) + ... + MR(n)
- 相比MR效率有所提升
第3代——Spark
接下來就是以 Spark 為代表的第三代的計算引擎。第三代計算引擎的特點主要是 Job 內部的 DAG 支持(不跨越 Job),以及強調的實時計算。在這里,很多人也會認為第三代計算引擎也能夠很好的運行批處理的 Job。
介紹
Spark是加州大學伯克利分校AMP實驗室(Algorithms, Machines, and People Lab)開發的通用內存并行計算框架
Spark使用Scala語言進行實現,它是一種面向對象、函數式編程語言,能夠像操作本地集合對象一樣輕松地操作分布式數據集,具有以下特點。
- 運行速度快:Spark擁有DAG執行引擎,支持在內存中對數據進行迭代計算。官方提供的數據表明,如果數據由磁盤讀取,速度是Hadoop MapReduce的10倍以上,如果數據從內存中讀取,速度可以高達100多倍。
- 易用性好:Spark不僅支持Scala編寫應用程序,而且支持Java和Python等語言進行編寫,特別是Scala是一種高效、可拓展的語言,能夠用簡潔的代碼處理較為復雜的處理工作。
- 通用性強:Spark生態圈即BDAS(伯克利數據分析棧)包含了Spark Core、Spark SQL、Spark Streaming、MLLib和GraphX等組件,這些組件分別處理Spark Core提供內存計算框架、SparkStreaming的實時處理應用、Spark SQL的即席查詢、MLlib或MLbase的機器學習和GraphX的圖處理。
- 隨處運行:Spark具有很強的適應性,能夠讀取HDFS、Cassandra、HBase、S3和Techyon為持久層讀寫原生數據,能夠以Mesos、YARN和自身攜帶的Standalone作為資源管理器調度job,來完成Spark應用程序的計算
- 批處理、流處理、SQL高層API支持
- 自帶DAG
- 內存迭代計算、性能較之前大幅提升
第4代——Flink
隨著第三代計算引擎的出現,促進了上層應用快速發展,例如各種迭代計算的性能以及對流計算和 SQL 等的支持。Flink 的誕生就被歸在了第四代。這應該主要表現在 Flink 對流計算的支持,以及更一步的實時性上面。當然 Flink 也可以支持 Batch 的任務,以及 DAG 的運算。
介紹
Flink 誕生于歐洲的一個大數據研究項目 StratoSphere。該項目是柏林工業大學的一個研究性項目。早期, Flink 是做 Batch 計算的,但是在 2014 年, StratoSphere 里面的核心成員孵化出 Flink,同年將 Flink 捐贈 Apache,并在后來成為 Apache 的頂級大數據項目,同時 Flink 計算的主流方向被定位為 Streaming, 即用流式計算來做所有大數據的計算,這就是 Flink 技術誕生的背景。
2014 年 Flink 作為主攻流計算的大數據引擎開始在開源大數據行業內嶄露頭角。區別于 Storm、Spark Streaming 以及其他流式計算引擎的是:它不僅是一個高吞吐、低延遲的計算引擎,同時還提供很多高級的功能。比如它提供了有狀態的計算,支持狀態管理,支持強一致性的數據語義以及支持 基于Event Time的WaterMark對延遲或亂序的數據進行處理等。
- 批處理、流處理、SQL高層API支持
- 自帶DAG
- 流式計算性能更高、可靠性更高
本文轉載自微信公眾號「大數據老哥」,作者大數據老哥。轉載本文請聯系大數據老哥公眾號。