Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting 在Map-Reduce编程中,reducer中的洗牌和排序阶段的目的是什么?_Sorting_Hadoop_Mapreduce_Hdfs_Shuffle - Fatal编程技术网

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

Sorting 在Map-Reduce编程中,reducer中的洗牌和排序阶段的目的是什么?,sorting,hadoop,mapreduce,hdfs,shuffle,Sorting,Hadoop,Mapreduce,Hdfs,Shuffle,在Map-Reduce编程中,Reduce阶段将洗牌、排序和Reduce作为其子部分。分拣是一件昂贵的事情 在Map Reduce编程中,reducer中的洗牌和排序阶段的目的是什么?我一直认为这是必要的,因为映射器的输出是reducer的输入,所以它根据键空间进行排序,然后为每个reducer输入拆分为bucket。您希望确保一个键的所有相同值最终都在同一个存储桶中,并传递到减速器,以便它们一起被减速。没有必要将K1、V2和K1、V4发送到不同的减速器,因为它们需要在一起才能减速 尝试尽可能简

在Map-Reduce编程中,Reduce阶段将洗牌、排序和Reduce作为其子部分。分拣是一件昂贵的事情


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

我一直认为这是必要的,因为映射器的输出是reducer的输入,所以它根据键空间进行排序,然后为每个reducer输入拆分为bucket。您希望确保一个键的所有相同值最终都在同一个存储桶中,并传递到减速器,以便它们一起被减速。没有必要将K1、V2和K1、V4发送到不同的减速器,因为它们需要在一起才能减速


尝试尽可能简单地解释它

MapReduce本机只做两件事:排序和(通过排序实现)可伸缩GroupBy。


MapReduce上的大多数应用程序和设计模式都是在这两个操作上构建的,这两个操作都是由shuffle和sort提供的。

首先
shuffling
是将数据从映射器传输到还原器的过程,因此我认为还原器显然是必要的,否则,他们将无法获得任何输入(或来自每个映射器的输入)。洗牌甚至可以在贴图阶段结束之前开始,以节省一些时间。这就是为什么当地图状态还不是100%时,您可以看到reduce状态大于0%(但小于33%)

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

您在其中一个答案中提到的分区是一个不同的过程。它确定映射阶段的输出(键、值)对将在哪个减缩器中发送。默认分区器使用键上的散列将它们分发给reduce任务,但您可以覆盖它并使用自己的自定义分区器

这些步骤的一个重要信息来源是()

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

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

更新:既然您正在寻找更正式的内容,您也可以阅读Tom White的书《Hadoop:权威指南》。这是你问题的有趣部分

自2007年2月以来,Tom White一直是Apache Hadoop提交者,并且是Apache软件基金会的成员,所以我认为它非常可信和官方…

< P>一些数据处理要求根本不需要排序。Syncsort使Hadoop中的排序可插入。这是他们关于排序的一个不错的博客。将数据从映射器移动到还原器的过程称为无序移动,有关该过程的更多信息,请参阅文章。

无序移动是将映射器的中间数据传输到0,1或更多还原器的过程。每个减速器接收1个或多个键及其相关值,具体取决于减速器的数量(用于平衡负载)。此外,与每个键相关的值在本地进行排序。

是一个很好的读数。希望能有帮助。就您所关心的排序而言,我认为这是地图最后一步的合并操作。当映射操作完成,并且需要将结果写入本地磁盘时,将对从缓冲区生成的拆分操作多重合并。对于合并操作,在advanced中对每个分区进行排序很有帮助。

, 在Mapreduce中,有两个重要的短语称为Mapperreducer,它们都太重要了,但reducer是必需的。在某些程序中,减速机是可选的。现在来问你的问题。 洗牌和排序是Mapreduce中的两个重要操作。第一个Hadoop框架采用结构化/非结构化数据,并将数据分为键和值

现在,Mapper程序将数据分离并排列为要处理的键和值。生成键2和值2的值。该值应按适当顺序进行处理和重新排列,以获得所需的解决方案。现在,这个洗牌和排序在您的本地系统中完成(框架小心),并在本地系统中处理一个又一个流程框架清理本地系统中的数据。 嗯

在这里,我们还使用组合器分区来优化这个洗牌和排序过程。在正确安排之后,这些键值将传递给Reducer以获得所需的客户机输出。最终得到期望的输出

K1,V1->K2,V2(我们将编写程序映射程序),->K2,V'(在这里洗牌并软化数据)->K3,V3生成输出。K4,V4

请注意,所有这些步骤仅为逻辑操作,不更改原始数据

您的问题:在Map Reduce编程中,reducer中洗牌和排序阶段的目的是什么


简短回答:处理数据以获得所需的输出。洗牌是聚合数据,reduce是获得预期输出。

让我们重温Mapreduce程序的关键阶段

映射阶段由映射者完成。映射程序在未排序的输入键/值对上运行。每个映射器为每个输入键/值对发射零、一或多个输出键/值对