- job提交的时候初始化JOB ①:输入路径 ②:reduce的个数 ③:输出路径 ④:maptask ⑤:reducetask
- 根据输入路径 计算任务切片 split[]
- 根据任务切片 初始化maptask(文件名,startoffset(处理数据的起始位置),length,map方法)
- maptask运行
- maptask处理数据 输入路径 >>Reader>>readline>>(K[LongWritable],v[Text])>>while(hashNextKeyValue)->map()
- maptask中的map方法【一个(key,valeu)执行一次】需求逻辑–>(NK,NV)
- contex.write(NK,NV)>>分区(分区器)>>(NK,NV,p[分区号])>>缓存数组中(区内排序)>>持久化到磁盘(也是分区的)
- reducetask启动程序–>1拿取数据–>2合并–>3分组–>4排序–>5调用reduce
计算任务切片:根据输入路径文件的大小和个数 个数:有三个文件则至少有3个maptask 大小:一个128*1.1大小文件为一个maptask 例 a.txt 200M 则分配2个maptask 还有reduceNumTask个数
得到一个split[]{mt0,mt1,mt2,rt0,rt1};
MR内部处理数据流程