大体能够将大数据的计算引擎分红了 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)。算法