mapTask工作机制
1、inputFile通过split被逻辑切分为多个split文件,TextInputFormat按行读取文件(每一个split文件对应一条MapTask线程)
2、文件被读取后,执行自定义mapper任务,生成K2、V2键值对
3、执行完毕后数据被加载到环形缓冲区(字节数组,可重复使用,默认大小100M,溢出率:0.8),当数据大小超过缓冲区溢出阈值,溢出部分数据开始进行落盘
4、落盘数据执行过程:1、分区(默认分区方式:使用K2哈希值作为分区标准),2、排序(快排),3、combiner(如果有combiner,这一步可以减少写到磁盘的数据量)执行完毕后,将多个小文件存入磁盘
5、数据被读取完毕后,会将所有数据进行merge(包括磁盘中的多个小文件和内存中的数据)
6、数据合并完毕后,再进行一次combiner,然后再次多所有数据进行一次排序(归并)
7、数据处理完毕后,生成临时文件,等待Reduce读取(定义多少分区便会生成多少个临时文件)
ReduceTask工作机制
1、复制MapTask处理完毕的数据到Reduce缓冲区(默认100M),当数据大小溢出时会生成小文件,然后将文件写入磁盘,如果设置了combiner,会对相同分区和相同key的数据进行排序
2、当前ReduceTask需要处理的数据读取完毕后,对所有的文件进行merge
3、对合并完毕的文件进行排序(归并/分组)
4、生成中间文件
5、自定义的Reducer对数据进行处理,然后将文件输出到HDFS系统