MapReduce运行流程和Yarn处理流程

1.首先从代码说起,

MapTask类中有四个方法可以被重写,cleanup,map,run,setup
setup的主要作用是加载一些资源,或者是在map阶段只需要一次运行的东西。
map主要负责处理数据
cleanup负责清理资源,释放资源
run负责调度这三个方法。

ReduceTask类中也类似。

2.MapReduce运行流程

MapReduce运行流程和Yarn处理流程_第1张图片
可能文件的内容比较大,所以先将文件切割,这里就假设切割成两块,split0和split1,首先读取文件,是由LineRecoderReader类读取的,这个类继承了RecordReader,可以从源码看到,一行一行的读取文件,然后Mapper类进行处理,处理完成后进入一个缓冲流,MapOutputBuffer,将数据序列化成字节数组,字节数组存放在内存中,进入一个环形缓冲区,当缓冲区满百分之八十的时候,会出现溢写,将文件溢写到本地磁盘,再进行排序,这里是快速排序,然后进行优化,Combiner.reduce,再进行分区,分区之后将所有的文件合并,再进行排序,因为之前的文件已经是有序的,所以这里是归并排序,排序之后还是存放在本地,进行分区,生成一个索引文件,记录分区信息,然后由ServerSocket机制发送给Reduce端,这个过程是Shuffle,Reduce端接收到Map的文件之后,先进行分组,然后处理,将文件写出,写到hdfs中,交给yarn集群处理。

3.Yarn运行流程

yarn运行流程如下图:
MapReduce运行流程和Yarn处理流程_第2张图片

首先由Driver向resourceManager提交请求运行一个Job命令,resourceManager同意之后,返回给一个jobid和存储切片,jar文件的位置,然后客户端根据返回的信息将切片和jar文件上传到hdfs的指定位置中,都是临时文件,Driver申请一个容器,运行进程。默认值是1.5G,resourceMAnager同意之后,生成容器任务,放进资源队列,资源队列形式不确定,可能是公平资源竞争,也可能是资源调度优先级算法,(操作原理内容,不详述),当任务开始执行的时候,创建任务容器,MapReduceAppManager,以下简称Manager,Manager加载任务信息,Driver发送一个启动命令,运行程序,Manager接受命令,加载配置信息,并且向ResourceManager申请运行yarnchild,yarnchild领到资源之后,根据Manager加载的任务信息下载jar包和切片 配置文件等,之后MapTask开始运行,进行数据处理,当MapTask运行结束后,向Manager申请新的容器,运行新的yarnchild(Reduce Task),reduceTask开始运行,拉取数据,当所有的任务执行完毕之后,Manager向ResourceManager注销本次的job,并推出程序。

你可能感兴趣的:(MapReduce,Yarn,MapReduce,Yarn)