当前位置: 首页 > 知识库问答 >
问题:

Map Reduce编程中reducer中的洗牌和排序阶段的目的是什么?

贾骏
2023-03-14

在Map Reduce编程中,Reduce阶段包含了shuffling、sorting和Reduce三个子部分。分拣是一件代价高昂的事情。

Map Reduce编程中reducer中的洗牌和排序阶段的目的是什么?

共有1个答案

宰父阳焱
2023-03-14

首先,shuffling是将数据从映射器转移到还原器的过程,所以我认为很明显,还原器必须这样做,否则,它们就不能有任何输入(或者每个映射器的输入)。洗牌可以在地图阶段完成之前开始,以节省一些时间。这就是为什么当映射状态还不是100%时,您可以看到大于0%(但小于33%)的reduce状态。

排序为reducer节省了时间,帮助它轻松区分新的reduce任务何时启动。简单地说,当排序后的输入数据中的下一个键与前一个键不同时,它只是启动一个新的reduce任务。每个reduce任务都接受键-值对的列表,但它必须调用reduce()方法,该方法接受键-列表(值)输入,因此它必须按键对值分组。如果输入数据在map阶段进行预排序(本地),并在reduce阶段进行合并排序(因为reducer从许多映射器获取数据),那么这样做是很容易的。

您在其中一个答案中提到的分区是一个不同的过程。它确定map阶段的输出(键、值)对将在哪个还原器中发送。默认分区器使用对键进行哈希以将它们分发到reduce任务,但您可以重写它并使用自己的自定义分区器。

这个Yahoo教程(存档)是这些步骤的一个很好的信息来源。

下面是一个很好的图形表示(shuffle在本图中称为“copy”):

请注意,如果指定零个还原器(setNumReduceTasks(0)),则根本不执行洗牌排序。然后,MapReduce作业在map阶段停止,而map阶段不包括任何类型的排序(因此即使是map阶段也更快)。

更新:既然你正在寻找更官方的东西,你也可以阅读汤姆怀特的书“Hadoop:权威指南”。这里是你问题的有趣部分。
Tom White自2007年2月以来一直是Apache Hadoop的提交者,并且是Apache软件基金会的成员,所以我想它是相当可信和官方的...

 类似资料:
  • 我的理解是,在mapreduce编程模型中,我们有映射和减少是两个阶段。完成映射阶段后,将生成中间值(键、值),并将其传递给化简器。 我的怀疑是,在map()阶段之后,洗牌和排序将到来。所以,我觉得洗牌和排序是还原阶段的一部分,是真的吗? 如果是这样的话,组合器()是如何工作的?

  • 我正在使用单个节点hadoop作业做一些数据准备。我的作业中的映射器/组合器输出许多键(超过5M或6M),显然作业进行得很慢,甚至失败。映射阶段最多运行120个mapper并且只有一个reducer(这些是自动确定的,我没有为它们设置任何值)。我想优化作业,使洗牌/排序阶段更有效地发生。我将增加到300M,但作业失败了,因为它的值大于映射器堆。然后我将设置为-xmx1024m,但它再次失败,因为它

  • 本文向大家介绍MapReduce中排序发生在哪几个阶段?这些排序是否可以避免?为什么?相关面试题,主要包含被问及MapReduce中排序发生在哪几个阶段?这些排序是否可以避免?为什么?时的应答技巧和注意事项,需要的朋友参考一下 解答: 一个MapReduce作业由Map阶段和Reduce阶段两部分组成,这两阶段会对数据排序,从这个意义上说,MapReduce框架本质就是一个Distributed

  • Maven目标和阶段之间的区别/联系是什么?它们是如何相互联系的?

  • 本文向大家介绍java和js实现的洗牌小程序,包括了java和js实现的洗牌小程序的使用技巧和注意事项,需要的朋友参考一下 这几天刚学了java和javascript,简单写了个用java和javascript的小程序 JavaScript的 java的 总结 以上所述是小编给大家介绍的java和js实现的洗牌小程序,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非

  • 本文向大家介绍JavaScript运行过程中的“预编译阶段”和“执行阶段”,包括了JavaScript运行过程中的“预编译阶段”和“执行阶段”的使用技巧和注意事项,需要的朋友参考一下  javascript相对于其它语言来说是一种弱类型的语言,在其它如java语言中,程序的执行需要有编译的阶段,而在javascript中也有类似的“预编译阶段”(javascript的预编译是以代码块为范围<scr