基于YARN的mapreduce作业执行流程详解
相对于MapReduce1系统,YARN将jobtracker的职能划分为多个独立个体,从而改善经典MapReduce在扩展时面临的瓶颈。
YARN中的实体:
1. 客户端:提交MapReduce作业;
2. 资源管理器:协调集群上计算资源的分配。
3. 节点管理器:负责启动和监视集群中机器上的计算容器(container)。
4. 应用管理器(MapReduce应用程序master):负责协调运行MapReduce作业的任务。他和MapReduce任务在容器中运行,这些容器有资源管理器分配并由节点管理器进行管理。
5. 分布式文件系统:用来和其他实体间共享作业文件,一般是hdfs。
YARN中MapReduce作业运行过程:
1. 作业提交
① 客户端从资源管理器获取应用程序id(作业id);
② 计算输入分片并将作业资源(作业jar包、配置和分片信息)复制到hdfs;
③ 客户端调用submitApplication()方法提交作业。
2. 作业初始化
资源管理器收到调用submitApplication()消息后,会将请求传递给调度器(scheduler),调度器分配一个容器,然后资源管理器在节点管理器的管理下在容器中启动应用程序的master进程(MRAppMaster)。
MRAppMaster对作业进行初始化:
① 创建多个簿记对象以保持对作业进度的跟踪(它会接受任务进度报告)
② 获取作业的输入分片信息;
③ 对每个分片创建一个map任务对象以及由mapreduce.job.reduces属性确定的多个reduce任务对象。
3. 任务分配
application master会为该作业中所有map任务和reduce任务向资源管理器请求容器,并将map任务输入数据文件的分片所在主机、机架信息、运行内存信息等传给资源管理器,调度器根据集群状态和任务信息分配容器,优先分配数据文件所在节点,次优先分配数据所在机架的节点。
4. 任务执行
资源管理器分配容器后将容器信息返回给application master,application master通过与节点管理器通信来启动分配的容器。容器首先需要将任务需要的资源本地化,包括作业配置、JAR包、和hdfs上的输入文件,本地化完成后执行map和reduce任务。
5. 进度和状态更新
任务定时向application master汇报进度和状态,application master汇聚全局状态。
客户端定时向application master获取作业进度信息。
6. 作业完成
客户端定时向application master查询作业是否完成,也可以通过http回调来通知作业完成。
作业完成后,application master和任务容器会清理其工作状态。
欢迎转发,未经作者同意严禁转载!