只有All Mappers完成后才能减少工作量?

时间:2012-04-17 13:42:57

标签: hadoop mapreduce reduce

美好的一天...... 我有一点困惑;减少任务和减少工作之间有什么区别? 这是我的情况;我已经读过,在所有映射完成之前,reduce不会启动... 但是在hadoop输出中,我看到了其他情况:

12/02/11 10:58:50 INFO mapred.JobClient: map 60% reduce 16%
12/02/11 10:58:54 INFO mapred.JobClient: map 60% reduce 20%
12/02/11 10:58:55 INFO mapred.JobClient: map 65% reduce 20%

降幅为16%,而地图仍为60%...... 这里真的发生了什么?

2 个答案:

答案 0 :(得分:15)

“减少阶段”有三个阶段:随机,排序,减少。随机播放复制数据和排序将键组合在一起。 reduce是您编写的实际reduce函数。

百分比的工作方式是洗牌是33%,排序是33%,减少是33%。您所看到的是“大约16%/ 33%(即48%)的数据已被复制到减速器”。在所有映射器完成之前,最终33%的“减少”无法启动。

答案 1 :(得分:4)

一旦第一个映射器完成处理输入,reducers就开始复制输出映射器产生,但是在所有映射器完成执行任务之前,reducers无法处理输入。这背后的原因是reducer可能会从未完成的映射器接收更多的输入数据,这可能会改变它处理输入的顺序。

您在控制台上看到的reducer的完成百分比表示Reducer正在从映射器复制数据。