1.MapReduce详细工作流程之Map阶段
1.首先有一个待处理的文本
ss.txt 假设为200M大小
2.在客户端submit()之前,获取待处理的数据的信息,然后根据参数配置,形成一个任务分配的规划 。(默认128m一个数据块)
ss.txt 0-128 任务1
ss.txt 128-200 任务2
3.提交信息
Job.split(任务切片信息)
wc.jar(需要提交的jar包)
Job.xml(xml配置文件)
将这三个文件从MapReduce客户端提交到Yarn上的ResourceManager上进行处理。
4.Yarn上提交时,会将每个任务封装成一个job,提交给yarn处理,ResourceManager会计算出MapTask数量(和切片数量一致),然后RM把任务分配给NodeMamager,在MR appmaster允许后,NodeManager就会来处理相应的任务(Maptask1&Maptask2),每个任务会并行执行。
5.MapTask会执行Mapper中的map方法,此方法需要传入k,v值,所以我们需要先从数据中获取k,v值,以作为输入的参数
具体做法是:首先调用InputFormat方法,默认为TextInputFormat方法,在此方法中调用createRecordReader方法,将每个块封装为(k,v)键值对,然后传递给map方法。
6.数据进入MapTask中以后会进行Map端的逻辑运算,运算完后,会进行写操作。
7.map端产生的数据如果直接进行写操作,写入到reduce中,会直接操作磁盘,这样就会进行大量的io操作,效率太低,所以map端和reduce端之间会进行一个shuffle操作。
所以map端产生数据后会通过outputCollector向环形缓冲