Hadoop--作业提交全过程解析(Hadoop工作流程) | 青训营笔记

684 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第7天

1. 作业提交过程之 YARN

image.png

2. 作业提交过程之 HDFS & MapReduce

image.png

上面两图是当有作业提交时,YARN、HDFS和MapReduce三大组件具体运作的流程,下面我们详细介绍下作业提交的全过程,我们从 作业提交、作业初始化、任务分配、任务运行、进度和状态更新、作业完成 六大方面去具体阐述。

(1)作业提交

第1步:客户端Client调用 job.waitForCompletion 方法,向整个集群提交 MapReduce 作业;
第2步:Client向 RM 申请一个作业id;
第3步:RM 给 Client 返回该job资源的提交路径和作业id;
第4步:Client 提交jar包、切片信息和配置文件到指定的资源提交路径;
第5步:Client 提交完资源后,向 RM 申请运行 MRAppMaster;

(2)作业初始化

第6步:当 RM 收到 Client 的请求后,将该job添加到容量调度器中;
第7步:某一个空闲的 NM 领取到该Job;
第8步:该 NM 创建 Container , 并产生 MRAppmaster;
第9步:下载 Client 提交的资源到本地;

(3)任务分配

第10步:MrAppMaster 向 RM 申请运行多个 MapTask 任务资源;
第11步:RM 将运行 MapTask 任务分配给另外两个 NodeManager,这两个 NodeManager 分别领取任务并创建容器;

(4)任务运行

第12步:MR 向两个接收到任务的 NodeManager 发送程序启动脚本,这两个 NodeManager 分别启动 MapTask,MapTask 对数据分区排序;
第13步:MrAppMaster 等待所有 MapTask 运行完毕后,向 RM 申请容器,运行ReduceTask;
第14步:ReduceTask 向 MapTask 获取相应分区的数据;
第15步:程序运行完毕后,MR 会向 RM 申请注销自己。

(5)进度和状态更新

   YARN中的任务将其进度和状态(包括counter)返回给应用管理器, 客户端每秒(通过mapreduce.client.progressmonitor.pollinterval设置)向应用管理器请求进度更新, 展示给用户。

(6)作业完成

   除了向应用管理器请求作业进度外, 客户端每5秒都会通过调用waitForCompletion() 来检查作业是否完成。时间间隔可以通过mapreduce.client.completion.pollinterval 来设置。作业完成之后, 应用管理器和Container 会清理工作状态。作业的信息会被作业历史服务器存储以备之后用户核查。