MapReduce的工作机制
(1)通过submit()方法将任务提交给客户端
(2)将通过split()方法得出的切片信息提交给Yarn
(3)NodeManger计算出MapTask数量(MapTask由Block大小决定)
(4)MapTask通过InputFormat类读取文件数据
(5)客户端以(key,value)结构来传输数据
(6)在Mapper阶段执行Mapper类中的map()方法和context.write()方法将数据写入到环形缓冲区
(7)环形缓冲区默认大小为100M,当达到80%时,会进行溢写
(8)在Combiner阶段,可以通过本地化的reduce操作(Combiner)进行优化,对数据进行简单的合并,减少网络之间的传输
(9)根据分区进行归并排序
(10)将归并排序好的数据下载到ReudceTask本地磁盘中
(11)合并文件,再进行归并排序
(12)每次读取一组数据到Reducer阶段当中
(13)在Reducer阶段执行Reducer类中的reduce()方法和context.write()方法,通过OutputFormat类写入到part-r-00000文件当中