大致可以將大資料的計算引擎分成了 4 代,
- 第一代的計算引擎,無疑就是Hadoop承載的MapReduce,它將每個JobApp都被設計為兩個階段,分別為Map和Reduce,對于上層應用來說,就不得不想方設法去拆分演算法,甚至于不得不在上層應用實作多個App的串聯,才能完成一個完整的演算法,例如迭代計算,不夠靈活,中間計算結果涉及到磁盤shuffle,影響效率,
Hadoop設計理念來自Google的三篇論文的啟發催生了下列組件
HDFS:分布式存盤【在役】
MapReduce:分布式結算【退役】
Hbase:分布式查詢【在役】
-
由于第一代的弊端,催生了支持 DAG 框架的產生,實作了DAG定義與算子的解耦,因此,支持用戶在算子外部自定義 DAG 的框架被劃分為第二代計算引擎,如 Tez 以及更上層的 Oozie,這里我們不去細究各種 DAG 實作之間的區別,不過對于當時的Tez和Oozie來說,大多還是批處理的任務,
-
接下來就是以Spark為代表的第三代的計算引擎,第三代計算引擎的特點主要是一個App內部支持多個Job,每個Job可以代表一套完整的資料處理流程(用Job完成一個完整流程的隔離),并實作了Job內嵌DAG,以及強調的實時計算,在這里,很多人也會認為第三代計算引擎也能夠很好的運行批處理的 Job,
Spark中幾個概念的作用范圍:App > Job > Stage > Operator > Task,從左至右都是1對多的關系,
- 隨著第三代計算引擎的出現,促進了上層應用快速發展,例如各種迭代計算的性能以及對流計算和SQL等的支持,Flink的誕生就被歸在了第四代,這應該主要表現在Flink對實時流計算的支持,以及更進一步的實時性上面,當然Flink也可以支持Batch的任務,以及DAG的運算,當然與Spark相比Flink還做了其他優化設計,比如更好的JVM記憶體管理(Flink并沒有將全部記憶體交給App管理,避免了在Spark中較頻發的OOM),
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/226448.html
標籤:其他
