【问题标题】:Map Reduce flow in HadoopHadoop 中的 Map Reduce 流
【发布时间】:2021-10-23 16:10:25
【问题描述】:

我正在使用 Hadoop in Practice 这本书学习 Hadoop,在阅读第 1 章时,我遇到了这个图表:

来自 Hadoop 文档:(http://hadoop.apache.org/docs/current2/api/org/apache/hadoop/mapred/Reducer.html)

1.随机播放

Reducer 是 Mapper 的分组输出。在该阶段,框架针对每个 Reducer,通过 HTTP 获取所有 Mapper 输出的相关分区。

2.排序

在此阶段,框架通过键对 Reducer 输入进行分组(因为不同的 Mapper 可能输出相同的键)。 shuffle 和 sort 阶段同时发生,即在获取输出时它们被合并。

虽然我知道shufflesorting 同时发生,但我不清楚框架如何决定哪个reducer 接收哪个mapper 输出。从文档中,似乎每个reducer 都有办法知道要收集哪个mapoutput,但我不明白如何。

所以我的问题是,鉴于上面的映射器输出,每个减速器的最终结果总是相同的?如果是这样,达到这个结果的步骤是什么?

感谢您的澄清!

【问题讨论】:

标签: java hadoop mapreduce pseudocode


【解决方案1】:

Partitioner 决定如何将 mapper 的输出分配到不同的 reducer。

Partitioner 控制中间映射输出的键的分区。密钥(或密钥的子集)用于派生分区,通常通过散列函数。分区总数与作业的reduce任务数相同。因此,这控制了 m 个减少任务中的哪个中间键(以及记录)被发送以进行减少。

【讨论】:

  • 谢谢,这让它更清楚了一点,我需要冥想才能理解这一点!
  • 你也可以告诉你的 mapreduce 程序使用 job 属性来设置 reducer 的数量...job.setNumReduceTasks(No_of_reducers_you_want) 。请注意参数是一个 int 元素,所以你可以明确定义 no of根据你想要的分区数量来减少器
猜你喜欢
  • 1970-01-01
  • 2012-07-07
  • 2011-07-21
  • 2014-03-22
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多