例如在字数统计工作中, 我有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函数之前是否会发生改组?或者调度程序只是从不同的映射器一起累积数据,但不将数据与相同的密钥组合在一起,这个过程在排序后发生?为什么排序在这里有用?
答案 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)),则根本不执行重排和排序。