为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

千万里不及你 2019-11-22 13:03:01
在Map Reduce编程中,reduce阶段具有改组,排序和reduce的子部分。排序是一件昂贵的事情。Map Reduce编程中的reducer的改组和排序阶段的目的是什么?
查看完整描述

3 回答

?
MYYA

TA贡献1868条经验 获得超4个赞

首先shuffling是将数据从映射器传输到简化器的过程,所以我认为对于简化器来说很明显是必要的,因为否则,它们将无法获得任何输入(或每个映射器的输入) 。改组甚至可以在地图阶段完成之前开始,以节省一些时间。因此,当地图状态尚未达到100%时,您会看到缩小状态大于0%(但小于33%)。


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


Partitioning您在其中一个答案中提到的,是一个不同的过程。它确定映射相位的输出(键,值)对将发送到哪个减速器。默认的分区程序在键上使用哈希将其分配给reduce任务,但是您可以覆盖它并使用自己的自定义分区程序。


这些步骤的重要信息来源是此Yahoo教程。


下面是一个很好的图形表示形式(在此图中,混洗称为“复制”):


请注意,如果您指定零个减速器(setNumReduceTasks(0))shuffling,sorting则根本不会执行和。然后,MapReduce作业在地图阶段停止,并且地图阶段不包括任何种类的排序(因此,即使地图阶段也更快)。


更新:由于您正在寻找更正式的东西,因此您也可以阅读Tom White的书“ Hadoop:权威指南”。这是您问题的有趣部分。

Tom White自2007年2月以来一直是Apache Hadoop的提交者,并且是Apache Software Foundation的成员,因此我认为它是相当可信且正式的...


查看完整回答
反对 回复 2019-11-22
?
慕勒3428872

TA贡献1848条经验 获得超6个赞

让我们回顾一下Mapreduce程序的关键阶段。


该地图相由映射器来完成。映射器在未排序的输入键/值对上运行。每个映射器为每个输入键/值对发出零个,一个或多个输出键/值对。


该组合相由合成器来完成。该组合应结合键/值对具有相同的密钥。每个组合器可以运行零次,一次或多次。


在洗牌和排序阶段是由框架来完成。来自所有映射器的数据按键分组,在化简器中拆分,然后按键排序。每个化简器获得与同一键关联的所有值。程序员可以提供用于排序的自定义比较功能,以及用于数据拆分的分区程序。


该分区决定哪些减速会得到一个特定的键值对。


该减速器取得排序键/ [值列表]对,排序由所述密钥。值列表包含由映射器生成的具有相同键的所有值。每个缩减器为每个输入键/值对发出零,一个或多个输出键/值对。


看看这个javacodegeeks 文章由玛丽亚Jurcovicova和mssqltips由达塔为了更好的理解文章


查看完整回答
反对 回复 2019-11-22
?
GCT1015

TA贡献1827条经验 获得超4个赞

我想到的只是添加以上答案中缺少的几点。从这里获取的这张图清楚地说明了实际情况。


如果我再说一遍的真正目的


拆分:通过在不同节点(映射程序)之间分配处理负载来改善并行处理,这将节省总体处理时间。


合并:缩小每个Mapper的输出。这样可以节省将数据从一个节点移动到另一个节点的时间。


排序(随机排序):使运行时可以轻松地计划(生成/启动)新的reducer,在浏览排序项目列表时,只要当前键与先前的键不同,就可以生成一个新的reducer 。


查看完整回答
反对 回复 2019-11-22
  • 3 回答
  • 0 关注
  • 651 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信