map task: 默认通过 TextInputformat(基类Inputformat) 读数据 TextInputformat 通过 RecordReader 调用 read() ,去hdfs上读数据(文件切片),数据的格为K,V。数据返回回来自动调用自定义的map方法。处理完后执行context.write()—-输出到——OutPutCollector —环形缓存区 默认大小100M 缓存达到80%进行hashpartition分区, 调用key compareTo 排序—-spiller,Conbinner,先在map阶段预处理数据—溢出–到文件(文件内数据分区且区内有序)一个溢出会到一个新文件—-Conbinner先在map阶段预处理数据–merge-所有溢出文件 归并排序——大文件map task最终结果文件 —–一个mapTask 的流程。
reduce reducetask—-一个map分区对应一个reduceTask——reducetask去map文件系统下载数据,下载到reducetask工作目录—-在次归并排序,合并文件——同一个key调用一次reduce方法———–GroupingCommparaor(k,nextk)判断KEY是否相同—–reduce(k,values) 方法中的k对应最前面相同k,v的key—context.write(k,v) —–默认TextOutPutFormat(基类OutPutFormat) –-RecordWriter write(k,v) –-写到hdfs上 part-r-00000文件中—–一次reducetask 流程。
map 进入缓存区开始 一直到reduce拿到数据调用之前 –——-Shuffle过程。
组件combinner 使用过程中,注意不能影响最后的结果。