超级硬核:大数据开发面试只需一张图

下面流程是整个mapreduce详细工作流程图


 流程:

1. 确定待处理文本

2.客户端在submit()前需要获取待处理的数据。大致流程是先判断判断job的当前状态,然后做hadoop2.x与handoop3.x的兼容,再做connect()确定当前任务是在本地模拟器上运行还是在搭建的Yarn集群上运行,最后进入submit()阶段。在submit()过程中会根据客户端类型(本地还是yarn集群),创建stagingdir路径存放临时文件,创建jobID与stagingdir绑定起来,根据jobID在stagingdir路径下创建临时文件夹xxx+jobID,将文件进行切片,切片成功后在临时文件夹下会出现4个临时文件(crc文件时校验文件),上传集群配置文件.xml文件到临时文件,此时临时文件路径下就会多了两个文件。最后判断是否需要上传jar包,如果是在本地运行,则不需要上传jar包,如果是在集群中运行则需要将jar包上传到yarn,客户端submit完成后,临时文件自动清除。总而言之,在客户端处需要提交三个文件:job.split切片文件、jar包(如果在yarn集群运行)、job.xml(配置信息)

3.客户端将Job提交到Yarn,ResourceManage会开启一个Mrappmaster管理这个job,同时分配一个containner空间用来存放这个Job。Mrappmaster会根据切片信息(job.split)计算出MapTask的数量

4.根据切片好的文件读入到Map函数中,map出来的结果将会进入outputCollector(即环形缓冲区)

5.环形缓冲区默认100M,一半用来存在元数据(每对<key,value>所对应的存储位置)。在环形缓冲区内对数据进行快速排序,排序的对象是key的index。当缓冲区内数据达到80%的时候,数据反向输入,并且数据开始溢出到磁盘。这么做的目的是 留给溢写时间,避免时间的浪费,提高效率。

6.对多个溢出的文件进行归并排序,用combiner进行合并成大的溢出文件

7.map完成后,将文件存放到磁盘,等待RedueTask的拉取

8.ReduceTask 根据自己的分区号,去各个 MapTask 机器上取相应的结果分区数据

9.ReduceTask 会抓取到同一个分区的来自不同 MapTask 的结果文件,ReduceTask 会将这些文件再进行合并(归并排序)

10.合并成大文件后,Shuffle 的过程也就结束了,后面进入 ReduceTask 的逻辑运算过 程(从文件中取出一个一个的键值对 Group,调用用户自定义的 reduce()方法)

Guess you like

Origin blog.csdn.net/baidu_41833099/article/details/121670775