大體能夠將大數據的計算引擎分紅了 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)。算法