作业在 Yarn 上的执行的流程

小咪咪 2022-09-12 13:43 290阅读 0赞

文章目录

  • 作业在 Yarn 上的执行的流程
    • AppMaster 的启动流程
    • 作业执行
      • 应用资源申请 AM - RM
      • 应用资源分配 NM - RM
    • 作业结束

作业在 Yarn 上的执行的流程

AppMaster 的启动流程

  • 客户端申请 job id
  • 客户端提交job到 ResourceManager,
  • 通过 RMStateStore 存储 Job 的提交信息(信息包括 启动作业的jar包、配置文件,AM 的资源以及启动 AppMaster 的参数)
  • 当 Job 信息存储完后,App 状态变为 SUBMITED,然后在调度器中创建对应的 App,并添加到调度器的集合中

    1. public class SchedulerApplication<T extends SchedulerApplicationAttempt> {
    2. private Queue queue;
    3. private final String user;
    4. private T currentAttempt;
    5. }
  • 然后创建一个 App 的一次尝试 AppAttempt
  • 将 AppAttempt 添加到调度器中,并更新调度器中 APP 的当前尝试
  • 之后会为应用程序的 ApplicationMaster 申请资源,该资源描述如下:

    1. <AM_CONTAINER_PRIORITY, ResourceRequest.ANY, appAttempt.getSubmissionContext().getResource(),1>

    即一个优先级为 AM_CONTAINER_PRIORITY(值为0)、可在任意节点上、资源量为X(用户提交应用程序时指定)的Container。

  • 当调度器为 AppMaster 分配资源后,会把当前的 AppAttemp 的信息存储到 RMStateStore 中,存储完成后会去启动 AppMaster
  • AppMaster 的启动由 ApplicationMasterLauncher 来完成,在对应的节点上启动 AppMaster,启动之后会向 AMLivelinessMonitor 注册 APPMaster,以监控其运行状态。

    AMLivelinessMonitor AM 过期时间默认为 10 分钟,每隔过 expireIntvl/3 检查一次是否有 AM 过期

  • AppMaster 启动后通过 RPC 函数 ApplicationMasterProtocol#registerApplicationMaster 向ResourceManager 注册,此时会在 AMLiveLinessMonitor 中更新心跳时间,并记录 AppMaster Web 服务的 URL,以便能从 Yarn UI 跳转至 MRAppMaster UI。
  • 之后 作业就进入了 RUNNING 状态。

作业执行

应用资源申请 AM - RM

  • AppMaster 向 ResourceManager 注册后,通过心跳向 ResourceManager 请求资源,

    心跳中包含的信息包括:资源需求描述、待释放的Container列表、请求加入黑名单的节点列表、请求移除黑名单的节点列表等。

  • 当 ResourceManager 的 ApplicationMasterService 收到先到后,会先更新 AMLivelinessMonitor 中更新 AppMaster 的最近更新时间 和 更新黑名单列表。
  • 释放待释放 Container
  • 将新的资源请求更新到调度器对应的数据结构中
  • 返回为该应用新分配的资源。

应用资源分配 NM - RM

  • NodeManager 通过心跳向 ResourceManager 汇报各个Container 运行状态。
  • 当 ResourceManager 收到心跳后,会更新该 NodeManager 上各个Container 的运行状态
  • 如果该节点上有可分配的空闲资源,则会在该节点上进行一次资源分配,而分配后的资源仅记录到对应的数据结构中,等待 APPMaster 下次通过心跳机制领取。

作业结束

  • 当作业运行结束后,AppMaster 会向 ResourceManager 注销自己
  • 开始聚集作业的日志,并上传 HDFS

发表评论

表情:
评论列表 (有 0 条评论,290人围观)

还没有评论,来说两句吧...

相关阅读

    相关 YARN工作流程

    [YARN的工作流程][YARN] 运行在YARN上的应用程序主要分为两类: (1)短应用程序 (2)长应用程序 短应用程序是指一定时间内(可能是秒级、分钟级或小时级,