1

美好的一天......我有点困惑;减少任务和减少工作有什么区别?这是我的情况;我已经读过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%……这里到底发生了什么?

4

2 回答 2

15

“reduce 阶段”分为三个阶段:shuffle、sort、reduce。shuffle 复制数据,而 sort 将键组合在一起。reduce 是您编写的实际reduce函数。

百分比的工作方式是 shuffle 是 33%,sort 是 33%,reduce 是 33%。您所看到的是“大约 16%/33%(即 48%)的数据已被复制到 reducer”。在所有映射器完成之前,最后 33% 的“减少”无法开始。

于 2012-04-17T14:22:54.383 回答
4

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

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

于 2012-04-17T14:40:22.343 回答