在reducer任务中调用reduce函数之前是否发生了shuffling?

时间:2017-06-03 20:28:50

标签: hadoop mapreduce

例如在字数统计工作中, 我有2个映射器Mapper A和Mapper B.

映射器A的输出是:{hi,1},{hello,1},{hey,1}

映射器B的输出为:{hi,1},{bye,1},{hey,1}

假设没有组合器和1个减速器

然后,首先,洗牌发生

所以,在洗牌时,两个映射器的输出合并,结果是:

{hi,[1,1]},{hello,1},{hey,[1,1]},{bye,1}

然后进行排序:

{bye,1},{hello,1},{hey,[1,1]},{hi,[1,1]}

然后调用reducer任务中的reduce函数,使o / p为:

bye,2
hello,1
hey,2
hi,2

上述过程是否正确?在调用reduce函数之前是否会发生改组?或者调度程序只是从不同的映射器一起累积数据,但不将数据与相同的密钥组合在一起,这个过程在排序后发生?为什么排序在这里有用?

2 个答案:

答案 0 :(得分:0)

简短的回答是:是的,在调用reduce()之前发生了混乱。需要排序以按键帮助减少组值。

有关详情,请点击此处查看答案:What is the purpose of shuffling and sorting phase in the reducer in Map Reduce Programming?

答案 1 :(得分:0)

是的,在调用reduce方法之前执行shuffling(和排序)。

注意: 但是,如果指定零减少器(setNumReduceTasks(0)),则根本不执行重排和排序。