当前位置: 首页 / 技术分享 / 正文
YARN的Job提交流程

2022-12-29

资源 yarn 计算 容器 作业

  YARN是在做大数据开发的时候,最为常用的分布式计算中的资源调度框架。是Hadoop的核心组件之一。在Hadoop2.0的版本之前,MapReduce中集成了分布式计算的模块和资源调度的模块,这就使得分布式计算和资源调度之间的耦合度太高了,同时MapReduce的设计也会显得非常的臃肿。在Hadoop2.0版本的时候,开发人员将MapReduce做了拆分,将分布式计算的模块保留,将资源调度的模块单独的剥离出来,这就是YARN了。

  YARN最早期的设计是为了解耦,优化MapReduce。但是由于YARN的通用性足够的优秀,以至于其他的分布式计算框架也都可以使用YARN来进行资源的调度。现在很多的分布式计算框架,例如Spark、Flink等,虽然他们也都内置了资源调度的部分,但实际在使用中,依然会选择使用YARN来进行资源的调度。

  那么在分布式计算中,我们将一个计算任务提交到YARN上进行运行的时候,YARN是如何去处理这个任务的呢?我们就以一个MapReduce的程序为例,来说明一下提交到YARN上之后,YARN都做了什么。

  在MapReduce的程序提交到YARN上运行的时候,有五个独立的进程需要首先了解一下:

  ●YarnRunner: 用于提交作业的客户端程序。

  ●ResourceManager: YARN资源管理器,负责协调集群上计算资源的分配。

  ●NodeManager: YARN节点资源管理器,负责启动和监视集群中,单个节点上的计算容器(Container)。

  ●Application Master: 负责协调运行MapReduce作业的任务,它和任务都是在容器中运行的,这些容器由资源管理器分配,并由节点管理器进行管理。

  ●HDFS: 用于共享作业所需文件。

1

  1 调用waitForCompletion方法每秒轮询作业的进度,内部封装了submit()方法,用于创建JobCommiter实例,并且调用其的submitJobInternal方法。提交成功后,如果有状态改变,就会把进度报告到控制台。错误也会报告到控制台

  2 JobCommiter实例会向ResourceManager申请一个新应用ID,用于MapReduce作业ID。这期间JobCommiter也会进行检查输出路径的情况,以及计算输入分片。

  3 如果成功申请到ID,就会将运行作业所需要的资源(包括作业jar文件,配置文件和计算所得的输入分片元数据文件)上传到一个用ID命名的目录下的HDFS上。此时副本个数默认是10.

  4 准备工作已经做好,再通知ResourceManager调用submitApplication方法提交作业。

  5 ResourceManager调用submitApplication方法后,会通知Yarn调度器(Scheduler),调度器分配一个容器,在节点管理器的管理下在容器中启动 application master进程。

  6 application master的主类是MRAppMaster,其主要作用是初始化任务,并接受来自任务的进度和完成报告。

  7 然后从HDFS上接受资源,主要是split。然后为每一个split创建MapTask以及参数指定的ReduceTask,任务ID在此时分配

  8 然后Application Master会向资源管理器请求容器,首先为MapTask申请容器,然后再为ReduceTask申请容器。(5%)

  9 一旦ResourceManager中的调度器(Scheduler),为Task分配了一个特定节点上的容器,Application Master就会与NodeManager进行通信来启动容器。

  10 运行任务是由YarnChild来执行的,运行任务前,先将资源本地化(jar文件,配置文件,缓存文件)

  11 然后开始运行MapTask或ReduceTask。

  12 当收到最后一个任务已经完成的通知后,application master会把作业状态设置为success。然后Job轮询时,知道成功完成,就会通知客户端,并把统计信息输出到控制台

分享: 更多

上一篇:YARN的调度器

下一篇:

好程序员公众号

  • · 剖析行业发展趋势
  • · 汇聚企业项目源码

好程序员开班动态

More+
  • HTML5大前端 <高端班>

    开班时间:2021-04-12(深圳)

    开班盛况

    开班时间:2021-05-17(北京)

    开班盛况
  • 大数据+人工智能 <高端班>

    开班时间:2021-03-22(杭州)

    开班盛况

    开班时间:2021-04-26(北京)

    开班盛况
  • JavaEE分布式开发 <高端班>

    开班时间:2021-05-10(北京)

    开班盛况

    开班时间:2021-02-22(北京)

    开班盛况
  • Python人工智能+数据分析 <高端班>

    开班时间:2021-07-12(北京)

    预约报名

    开班时间:2020-09-21(上海)

    开班盛况
  • 云计算开发 <高端班>

    开班时间:2021-07-12(北京)

    预约报名

    开班时间:2019-07-22(北京)

    开班盛况
在线咨询
试听
入学教程
立即报名

Copyright 2011-2023 北京千锋互联科技有限公司 .All Right 京ICP备12003911号-5 京公网安备 11010802035720号