2014-12-19 86 views
0

我有洗牌开始时间的问题。什么时候洗牌开始在Hadoop

让你说我有2个mappers和1个​​reducer。每个映射器都将生成输出map1和map2。 map1和map2存储在相应datanode的临时磁盘中。

现在减速机应该等待map1和map2的输出吗?换句话说,什么时候洗牌开始?只要map1完成或它必须等待map2完成?

我正在倾听在减速机上洗牌的流量,我无法找到任何交通,但控制台输出显示已完成减速的70%(大约)。

14/12/18 17:45:55 INFO mapred.JobClient: map 97% reduce 22% 
14/12/18 17:45:58 INFO mapred.JobClient: map 98% reduce 22% 
14/12/18 17:45:59 INFO mapred.JobClient: map 99% reduce 22% 
14/12/18 17:46:07 INFO mapred.JobClient: map 100% reduce 22% 
14/12/18 17:46:12 INFO mapred.JobClient: map 100% reduce 67% 
14/12/18 17:46:15 INFO mapred.JobClient: map 100% reduce 71% 

我看到洗牌后的交通流量进入此点后。

我在这里有点困惑。减速机约70%的工作是什么? !

感谢

+0

看看这个SF问题:http://stackoverflow.com/questions/11672676/when-do-reduce-tasks-start-in-hadoop – Ashrith 2014-12-19 06:03:17

回答

1

在你减速。首先33%是复制阶段,那么接下来的33%是洗牌和排序阶段,然后最后的33%是你的实际减少操作。

我会尝试解释一个简单的流程: 地图任务完成后,地图任务的输出将被复制到需要发生减少任务的地方。 Map和Reduce不会发生在同一台机器上。 当某些mapper完成时,即使在完整映射阶段发生之前,您也会注意到reduce阶段的一些增量。它是那些完成的map任务输出的数据复制。完成的地图任务现在可以在减少任务发生的地方进行复制。只有在完整地图阶段结束后才能开始排序。这是因为输出键需要排序..并且直到您拥有排序才能排序完整的按键空间..对.. ??

+0

谢谢你。什么是33%的复制阶段?复制到哪里?只有在所有映射完成后才开始混洗? – navaz 2014-12-19 01:22:33

+0

“复制阶段”是指将输出数据从映射器移动到适当的缩减器。根据您的配置,这将在映射器接近完成时开始。在映射器完成后,随机排序然后开始。 – Nonnib 2014-12-19 08:55:13

+0

我在复制和混洗阶段有点困惑。 @Fraz我认为洗牌阶段不过是将数据从映射器移动到还原器。如果是这样,最初的33%是什么? – navaz 2014-12-19 15:14:43

0

中清楚地解释了混洗和排序阶段一起被称为“复制”阶段。排序在RAM中完成。如果由于内存不足而需要外部排序,则会发生合并排序。所以我们编写排序/合并。

实际上,每个Map任务有3个阶段:Map,Partitioning,Sort/Merge。每个Reduce任务有3个阶段:混洗,排序/合并,减少。

在Hadoop中,当生成所有地图任务输出的5%时,随机阶段开始。在此策略中,尽管洗牌阶段较早开始以减少作业执行时间,但它会导致重复合并和减少更多磁盘访问,这又会导致作业执行时间延长。