Apache Flink和Hadoop上的MapReduce相比有哪些区别?

14

Apache Flink相对于Hadoop上的Mapreduce有何不同?它的优势在哪里以及为什么?


在SO问题中并不真正使用标签,我建议您只需提出问题并添加适当的标签。 - Angelo Genovese
2个回答

17

免责声明:我是Apache Flink的开发者和PMC成员。

与Hadoop MapReduce类似,Apache Flink是一种并行数据处理器,具有自己的API和执行引擎。Flink旨在支持许多Hadoop用于的用例,并且与Hadoop生态系统中的许多系统(包括HDFS和YARN)兼容。

我将通过区分MapReduce编程模型和MapReduce执行模型来回答您的问题。

编程模型

Apache Flink的编程模型基于MapReduce编程模型的概念,但在多个方面上进行了泛化。Flink提供了Map和Reduce函数,还提供了其他转换,例如Join、CoGroup、Filter和Iterations。这些转换可以组装成任意数据流,包括多个来源、汇、分支和合并流。Flink的数据模型比MapReduce的键值模型更通用,并允许使用任何Java(或Scala)数据类型。可以以灵活的方式在这些数据类型上定义键。

因此,Flink的编程模型是MapReduce编程模型的超集。它允许以更方便、更简洁的方式定义许多程序。我还想指出,可以在Flink程序中嵌入未修改的Hadoop函数(Input/OutputFormats、Mapper、Reducers)并与本地Flink函数一起执行。

执行模型

从执行模型来看,Flink 借鉴了许多并行关系数据库系统的概念。Flink采用了流式处理模型,这减少了在本地或分布式文件系统上实现中间结果的需要(此外,这也使得Flink能够进行实时流处理)。此外,Flink程序的执行与程序的规范并没有紧密耦合。在MapReduce(由Apache Hadoop完成)中,每个MapReduce程序的执行都遵循完全相同的模式。Flink程序被提交到一个优化器中,该优化器会找出一种有效的执行计划。与关系型DBMS类似,优化器选择数据传输和连接策略,以避免诸如数据洗牌和排序之类的昂贵操作。需要指出的是,Flink还没有在Hadoop所运行的大规模扩展方面进行过测试。我知道有Flink设置可以运行200个节点。


7

补充Fabian的回答:

另一个区别是,Flink不仅是纯批处理系统,同时可以进行低延迟流分析,并提供了一个很好的API来定义流分析程序。

内部而言,Flink实际上是一个流处理系统。对于Flink来说,批处理程序是流处理程序的一种特殊情况。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接