写点什么

YARN 工作流程

  • 2022-10-21
    北京
  • 本文字数:1144 字

    阅读完需:约 4 分钟

YARN工作流程

运行在 YARN 上的应用程序主要分为两类:短作业长服务

  • 短作业是指一定时间内(可能是秒级、分钟级或小时级,尽管天级别或者更长时间的也存在,但非常少)可运行完成并退出的应用程序,比如 MapReduce 作业、Spark 作业等;

  • 长服务是指不出意外,永不终止运行的应用程序,通常是一些在线服务,比如 Storm Servive(主要包括 Nimbus 和 Supervisor 两类服务)、HBase Service(包括 Hmaster 和 RegionServer 两类服务)等,而它们本身作为一个框架或服务提供了访问接口供用户使用。


尽管这两类应用程序作用不同,一类直接运行数据处理程序,一类用于部署服务(服务之上再运行数据处理程序),但运行在 YARN 上的流程是相同的。


当用户向 YARN 中提交一个应用程序后,YARN 将分两个阶段运行该应用程序:第一个阶段是启动 ApplicationMaster;第二个阶段是由 ApplicationMaster 创建应用程序,为它申请资源,并监控它的整个运行过程,直到运行成功。YARN 的工作流程分为以下几个步骤:


1)提交应用程序:用户通过客户端与 YARN ResourceManager 通信,以提交应用程序,应用程序中需包含 ApplicationMaster 可执行代码、启动命令和资源需求、应用程序可执行代码和资源需求、优先级、提交到的队列等信息。


2)启动 ApplicationMaster:ResourceManager 为该应用程序分配第一个 Container,并与对应的 NodeManager 通信,要求它在这个 Container 中启动应用程序的 ApplicationMaster,之后 ApplicationMaster 的生命周期直接被 ResourceManager 管理。


3)ApplicationMaster 注册:ApplicationMaster 启动后,首先,向 ResourceManager 注册,这样,用户可以直接通过 ResourceManage 查看应用程序的运行状态,然后,它将初始化应用程序,并按照一定的策略为内部任务申请资源,监控它们的运行状态,直到运行结束,即重复步骤 4~7。


4)资源获取:ApplicationMaster 采用轮询的方式通过 RPC 协议向 ResourceManager 申请和领取资源。


5)请求启动 Container:一旦 ApplicationMaster 申请到资源后,则与对应的 NodeManager 通信,请求为其启动任务(NodeManager 会将任务放到 Container 中)。


6)启动 Container:NodeManager 为任务设置好运行环境(包括环境变量、jar 包、二进制程序等)后,将任务启动命令写到一个脚本中,并通过 ContainerExecutor 运行该脚本启动任务。


7)Container 监控:ApplicationMaster 可通过两种方式获取各个 Container 的运行状态,以便在任务失败时重新启动任务:

  • ApplicationMaster 与 ResourceManager 间维护了周期性心跳信息,每次通信可获取自己分管的 Container 的运行状态。

  • 各个 Container 可通过某个 RPC 协议向 ApplicationMaster 汇报自己的状态和进度(视具体应用程序而定,比如 MapReduce 和 YARN 均实现了该方式)。


8)注销 ApplicationMaster:应用程序运行完成后,ApplicationMaster 向 ResourceManager 注销,并退出执行。


发布于: 刚刚阅读数: 4
用户头像

InfoQ签约作者 2018-11-30 加入

热爱生活,收藏美好,专注技术,持续成长

评论

发布
暂无评论
YARN工作流程_YARN_穿过生命散发芬芳_InfoQ写作社区