1、准备待处理文件(200M) 2、submit()对原始文件进行切片分析(128M一块,这里0-128M为第一块,128-200位第二块) 3、提交信息 客户端会准备三样东西(Job的切片:Job.split,jar包:wc.jar,xml:Job.xml),对这个集群进行提交。 如果是本地模式,则没有jar包,正常生产模式下,都是用的YARN集群模式,所以jar包是一定有的。 4、计算出MapTask数量 客户端向YARN提交后,YARN会开启一个Mrappmaster(整个任务运行的老大),Mrappmaster会读取客户端对应的信息,最主要的就是读取切片信息(Job.split),Mrappmaster会根据切片个数,开启对应数量的MapTask,这里是两个切片,则对应开启两个MapTask。 5、MapTask工作 MapTask一启动后,就会开始工作,MapTask通过InputFormat来读取输入的文件,默认使用TextInputFormat,TextInputFormat源码里面有两个方法:1)RecorderReader(按行进行读取)和 2)isSplitable(判断这个文件是否可以切割),通过RecorderReader对文件数据按行进行读取,读完后,返回K(整个文件中的起始字节偏移量)和V(这行的内容)。 6、逻辑运算 数据读取完成后,将数据给到Mapper,Mapper里面是用户根据实际需求自己写的业务逻辑代码。数据处理完成后,通过outputCollector向环形缓冲器写入数据。 7、向环形缓冲器写入数据 环形缓存区默认大小为100M,左侧存索引,右侧存数据。当环形缓冲区数据写到80%时,进行反向写,将数据写入到磁盘。 这里可能会有一个小问题:为什么不存到100%才开始反向写? 主要是为了不影响Mapper处理完的数据写入环形缓冲区,如果写到100%环形缓冲区再反向写,就会导致Mapper处理后的数据无法再接着写入环形缓冲区,需要等环形缓冲区的数据反写到磁盘,才能继续写入环形缓冲区,影响处理进度,所以当环形缓冲区数据写到80%时,则开始进行反写,留下20%空间可以进行写入Mapper处理完的数据。 8、分区、排序 9、溢出文件到磁盘(分区且区内有序) 当环形缓冲区中数据达到80%时,数据就会溢写到磁盘上,溢写文件可以是多个。 10、Merge归并排序 通过归并排序对所有溢写文件根据分区进行排序,保证每一个分区内数据有序。归并排序后数据就会存储到磁盘上。 11、Combiner合并 12、启动ReduceTask 13、下载数据到ReduceTask 14、分组(可选流程) 此时可根据实际情况,是否选择进行一次分组。 15、Reduce读取数据 16、往外写数据

视频信息