什么时候洗牌开始在Hadoop
我有洗牌开始时间的问题。什么时候洗牌开始在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%的工作是什么? !
感谢
在你减速。首先33%是复制阶段,那么接下来的33%是洗牌和排序阶段,然后最后的33%是你的实际减少操作。
我会尝试解释一个简单的流程: 地图任务完成后,地图任务的输出将被复制到需要发生减少任务的地方。 Map和Reduce不会发生在同一台机器上。 当某些mapper完成时,即使在完整映射阶段发生之前,您也会注意到reduce阶段的一些增量。它是那些完成的map任务输出的数据复制。完成的地图任务现在可以在减少任务发生的地方进行复制。只有在完整地图阶段结束后才能开始排序。这是因为输出键需要排序..并且直到您拥有排序才能排序完整的按键空间..对.. ??
中清楚地解释了混洗和排序阶段一起被称为“复制”阶段。排序在RAM中完成。如果由于内存不足而需要外部排序,则会发生合并排序。所以我们编写排序/合并。
实际上,每个Map任务有3个阶段:Map,Partitioning,Sort/Merge。每个Reduce任务有3个阶段:混洗,排序/合并,减少。
在Hadoop中,当生成所有地图任务输出的5%时,随机阶段开始。在此策略中,尽管洗牌阶段较早开始以减少作业执行时间,但它会导致重复合并和减少更多磁盘访问,这又会导致作业执行时间延长。
看看这个SF问题:http://stackoverflow.com/questions/11672676/when-do-reduce-tasks-start-in-hadoop – Ashrith 2014-12-19 06:03:17