问题:
答:一个MapReduce作业由Map阶段和Reduce阶段两部分组成,这两个阶段会对数据排序,从这个意义上说,MapReduce框架本质上就是一个Distributed Sort。在Map阶段,Map Task会在本地磁盘输出一个按照key排序(采用的是快速排序)的文件(中间可能产生多个文件,但最终会合并成一个),在Reduce阶段,每个Reduce Task会对收到的数据排序,这样,数据便按照key分成了若干组,之后以组为单位交给reduce()处理。很多人的误解在Map阶段,以为如果不使用Combiner便不会排序,这是错误的,不管你用不用Combiner,Map Task均会对产生的数据进行排序(如果没有Reduce Task,则不会排序,实际上Map阶段的排序就是为了减轻Reduce端排序负载)。
● 参考解析