MapReduce工作流程原理详解
(1)输入数据(Input):
客户端submit()(客户端submit()前就已经将数据进行逻辑上的规划,也就是切片了),客户端将数据信息(job.split , wc.jar等)提交给Yarn的ResourceManager进行处理,ResourceManager启动NodeManager和ApplicationMaster,ApplicationMaster根据接收到的job.split信息,开启与切片个数相同个数的MapTask,MapTask启动后,用InputFormat(默认是TextInputFormat)的RecorderReader按行读取文件,然后传给Mapper(因为Mapper的输入key是偏移量,输入value就是读取的一行内容)
(2)Mapper阶段:
接收到RecorderReader传过来的K,V后,在重写的map()方法中进行用户自定义的业务逻辑操作,然后通过context.write(outK,outV)将数据输出到OutputCollector,也叫环形缓冲区
(3)Shuffle阶段:
①环形缓冲区,分为两个部分,左边存储右边数据相对应的索引(index – 索引,partition – 分区,keystart – 标记数据存储在哪,valuestart – 标记数据存储在哪),右边存储数据(map阶段的key – 偏移量,