MapReduce处理流程
1)把输出目录下文件按照一定的标准进行逻辑切片,形成切片规划
默认为,split size=Block size=128M。每一个切片由一个MapTask处理
2)TextInputFormat对切片中的数据进行一行一行的读取,把每一行文本内容解析成键 值对。key是每一行的起始位置,value是本行的文本内容
3)调用map方法,并将mapper结果输出到环形缓冲区,数据分区在此之前完成(job.setNumReduceTask()),partition对应Reducer。
内存缓冲区大小为100M,内存缓冲区达到80%,进行spill溢出溢写在此之前对key进行排序,溢写到磁盘,如果设置combiner,运行combiner,进行merge合并(归并排序)小文件成大文件(每merge一次就排序一次)
4)当maptask处理完自己负责的切片数据之后,把结果保存在自己运行机器的某个目录下,等待着ReduceTask的拉取
ReducerTask
5)Reducer任务会主动从Mapper中拉取其输出的键值对,拉取到Reducer缓冲区
6)对数据进行merge sort合并排序
7)然后进行grouping分组,key相同的为一组
8)同一分组的数据组成一个新的kv对
9)调用reduce方法,将结果输出到HDFS文件中