基于YARN的mapreduce作业执行流程详解

相对于MapReduce1系统,YARN将jobtracker的职能划分为多个独立个体,从而改善经典MapReduce在扩展时面临的瓶颈。

基于YARN的mapreduce作业执行流程详解
标基于YARN的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和任务容器会清理其工作状态。

欢迎转发,未经作者同意严禁转载!