YARN 工作流程详解
YARN,全称 Yet Another Resource Negotitator ,另一种资源协调者。是大数据领域非常优秀的资源调度管理组件。 很多大数据框架将 YARN 作业自己的资源调度工具,如 Spark。
主要学习:
- 是什么
- 干什么
- 怎么干的
Yarn 从功能上来说,主要负责数据计算中的两件事情:资源管理、程序调度。主要由两个核心模块构成,即 ResourceManager、NodeManager。其中,ResourceManager是统揽全局的核心,NodeManager负责管理每个计算机节点上的资源调度。在 Yarn 进行大数据计算时,可以划分为 5 个大阶段。如下:
- 1、作业提交阶段
- 2、作业初始化阶段
- 3、任务分配阶段
- 4、任务运行阶段
- 5、作业完成阶段
作业提交阶段
在作业提交阶段,主要做了如下事情。
1、Clitnt提交 job,申请 jobid。申请资源的应用(Client),调用 job.waitForApplication()方法,向整个集群提交 Job,同时申请一个 jobId。
2、RM 返回资源提交路径和 Jobid。RM 收到 Client 的请求,返回该 job 资源的提交路径(hdfs 路径)、jobid。
3、上传计算所需要的资源到指定位置。Client 收到 RM 的返回后,根据返回数据的值发送 Jar 包、Configuration 信息、InputSplit(切片信息)
4、创建 ApplicationManager。Client 提交完资源后,向 RM 发送执行作业请求;RM 接受到此请求之后,会针对这个 job,创建 一个 ApplicationManager,来管理这个 job。
作业初始化阶段
5、新创建的 ApplicationManaer 会将job 作业加到ResourceScheduler。也即资源调度器中,ResourceScheduler内部维护了一个队列,所有需要执行的 Job,都将被保存到此队列当中,并按照一定规则等待执行。
6、当轮到 Job 执行时,ResourceScheduler 将会通知 ApplicationManaer ,告诉他有一个空闲 NodeManaer 可以执行job。
7、ApplicationManaer 就会调用分配给它的 NodeManager, 在 NodeManager 当中,会开辟一个容器,并在这个 container 中,启动对应的需要被执行的job 的 ApplicationMaster。
8、ApplicationMaster会从 HDFS 上获取第三步提交的文件,根据分片信息,生成 Task。
任务分配阶段
9、ApplicationMaster向 ResourceManager 申请运行 Task 的任务资源。
10、ResourceManager 将Task 任务分配给空闲的 NodeManager,NodeManager分别另外任务、并创建用于执行 Task 的container 容器。
任务运行阶段
这个阶段计算会真正跑起来。
11、ApplicationMaster 通知所有接受到Task 的NodeManager 启动计算。
12、NodeManager 启动Task 计算。
13、 如果这一批 Task 运行完毕,还有新的 Task 需要执行,则向ResourceManager 申请 container,来运行新的 Task。
14、所有的 Task 执行完毕后(Job 执行完毕),ApplicationMaster 会向 ResourceManager 申请注销自己。
作业完成阶段
15、框架计算和更新任务的进度和状态。