大数据【内核】---MapReduce的详细执行流程(三)
一、MR的整体执行流程图
二、MR的整体执行流程:(Yarn模式)
- client申请作业,Yarn系统返回一个jobid
- 客户端程序在**submit()**方法执行前,获取待处理的数据信息,然后根据集群中的参数的配置形成一个任务分配规划(jar包、Configuration信息、InputSplit分片信息),客户端上传任务分配规划,到相应的HDFS(Yarn)路径
- Yarn中的resourcemanager启动MRAppmaster。
- MRAppmaster启动后根据本次job的描述信息,计算处需要的maptask实例对象,然后向集群申请(AppMaster向NodeManager申请)机器启动相应数量的maptask进程(YARN的Job提交流程)。
- Maptask利用客户端指定的inpuformat来读取数据,形成输出的KV键值对(K:行的起始偏移量;V:行的内容)。
- Maptask将输入KV键值对传递给客户定义的map()方法,做逻辑运算,形成新的键值对,通过context.write输出到maptask缓存中(OutputCollector收集器)(5~6:Maptask的执行流程)
map task逻辑运算过程
8. shuffle阶段(过程前面一般在maptask节点中,后半部分在reduce节点中进行)
① maptask将存储在task缓存中的键值对KV,输出至环形缓冲区中
② maptask中的KV对按照K分区、排序,并不断溢写(在环形缓冲区读取容量到达80%以上时)到本地磁盘文件中,可能由溢出多个文件
③ 多个文件会合并成大的溢出文件(merge归并排序)
④ 在溢写过程,及其合并过程中,都会不停的进行分区和针对key的排序操作(Combiner)。
⑤ Reducetask根据自己的分区号,去各个maptask机器上获取相应的结果分区数据(reduce下载数据:shuffle)
⑥ ReduceTask会获取到同一分区的来自不同maptask的结果文件,reducetask会将这些文件再进行归并排序(merge)
shuffle过程
- 合并成大文件后,shffle的过程也是就结束了,后面进入到reducetask的逻辑运算过程(从文件中取出一个个的键值对group(根据键key分组),调用用户自定义的reduce()方法):
① MRpAppmaster监控到所有的maptask进程结束完成之后,会根据客户指定的参数启动相应数量的reducetask进程,并告知reducetask进程要处理的数据分区。
② reducetask进程启动后,根据MRAppMaster告知待处理的数据所在位置,从若干台maptask节点获取若干个mapTask输出结果文件,并在本地进行重新归并排序,然后按照相同key的KV为一组,调用用户定义的**reduce()**方法进行逻辑运算 - reduceTask运行完毕后,调用用户指定的outputFormat将结果输出到外部