13

Apache Flink 与 Hadoop 上的 Mapreduce 相比如何?它在哪些方面更好,为什么?

4

2 回答 2

16

免责声明:我是 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 运行的大规模横向扩展上进行测试。我知道在多达 200 个节点上运行的 Flink 设置。

于 2015-04-28T18:28:51.890 回答
6

添加到Fabian的答案:

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

在内部,Flink 实际上是一个流系统。对于 Flink 来说,Batch 程序是流式程序的一个特例。

于 2015-05-13T22:16:57.790 回答