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 – 偏移量,value – 行的内容),当环形缓冲区的内存达到80%时,进行溢写到磁盘,(因为达到100%后,容易让数据等待,效率低,80%时,效率高)
②数据一进到环形缓冲区的时候,就会被标记好在哪个分区,(因为每个分区存储的位置不一样,在不同的reduce文件中,所以提前分配好,独立进行处理)然后会对分区内部的数据进行排序(等到环形缓冲区到达80%,进行溢写前,进行排序),采用快排(对索引进行排序)
③【快排之后】到达80%的时候,就会将环形缓冲区的数据溢写到磁盘

本文详细介绍了MapReduce的工作流程,包括输入数据阶段、Mapper阶段、Shuffle阶段、Reducer阶段和输出数据阶段。在Mapper阶段,数据经过用户自定义的业务逻辑处理后,进入Shuffle阶段进行分区、排序和归并。Reducer阶段则负责拉取数据,处理相同的key,并将结果输出。
最低0.47元/天 解锁文章
8658

被折叠的 条评论
为什么被折叠?



