reduce任务和reducer的区别

Difference between reduce task and a reducer

"a reducer is different than a reduce task. A reducer can run multiple reduce tasks"。有人可以用下面的例子解释一下吗?

foo.txt:亲爱的,这是 foo 文件 bar.txt: 这是条文件

我正在使用 2 个减速器。什么是 reduce 任务以及基于什么在 reducer 中生成多个 reduce 任务?

根据我的理解,Reducer是一个计算资源槽,可以用来完成reduce任务。 reducer 可以分配给一个任务,它执行到 completion/failure,一旦任务达到结束状态,它就可用于处理另一个 reduce 任务,post-cleanup。

在 Yarn 中,概念有点不同。

reducer 是您正在编写(或重用)的代码来处理传入的数据。

reduce 任务是在集群中的节点上运行的 reducer 代码的实际实例化。此任务有一个状态机,可能会失败。如果失败,另一个 reduce 任务将启动以重新启动计算。这称为减少任务 attempt。重新开始计算的重试次数有限 ("maximum amount of attempts")。

您可以配置 n 个 reducer(如在 reduce 任务中),这是在作业执行的任何时间点可能发生的最大并行 reduce 任务数量(抛开推测执行)。

Reducer 是一个 class,其中包含 reduce 函数,如下所示

protected void reduce(KEYIN key, Iterable<VALUEIN> values, Context context
                        ) throws IOException, InterruptedException {

Reduce task是一个节点上的程序运行,正在执行reduce Reducer class.

函数

你可以认为Reduce taskReducer的一个实例

查看 Apache MapReduce 教程页面了解更多详细信息(Payload 部分)。