YARN 应用提交过程

本文详细阐述了YARN架构下应用程序提交、ApplicationMaster管理与Container启动的全过程,包括客户端交互、资源申请与调度,以及任务运行和最终注销。

前言

本文隶属于专栏《大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!

本专栏目录结构和参考文献请见大数据技术体系


YARN 应用提交过程

Application 在 Yarn 中的执行过程,整个执行过程可以总结为三步:

  1. 应用程序提交
  2. 启动应用的ApplicationMaster实例
  3. ApplicationMaster 实例管理应用程序的执行

在这里插入图片描述


详细版本

  1. 客户端程序向 ResourceManager 提交应用并请求一个 ApplicationMaster 实例;
  2. ResourceManager 找到一个可以运行一个 Container 的 NodeManager,并在这个Container 中启动 ApplicationMaster 实例;
  3. ApplicationMaster 向 ResourceManager 进行注册,注册之后客户端就可以查询 ResourceManager 获得自己 ApplicationMaster 的详细信息,以后就可以和自己的 ApplicationMaster 直接交互了(这个时候,客户端主动和 ApplicationMaster 交流,应用先向 ApplicationMaster 发送一个满足自己需求的资源请求);
  4. 在平常的操作过程中,ApplicationMaster 根据 resource-request 协议向 ResourceManager 发送 resource-request 请求;
  5. 当 Container 被成功分配后,ApplicationMaster 通过向 NodeManager 发送 container-launch-specification 信息来启动 Container,container-launch-specification 信息包含了能够让 Container 和 ApplicationMaster 交流所需要的资料;
  6. 应用程序的代码以 task 形式在启动的 Container 中运行,并把运行的进度、状态等信息通过 application-specific 协议发送给 ApplicationMaster;
  7. 在应用程序运行期间,提交应用的客户端主动和 ApplicationMaster 交流获得应用的运行状态、进度更新等信息,交流协议也是 application-specific 协议;
  8. 一旦应用程序执行完成并且所有相关工作也已经完成,ApplicationMaster向 ResourceManager 取消注册然后关闭,用到所有的 Container 也归还给系统。

精简版本

  1. 用户将应用程序提交到 ResourceManager 上;
  2. ResourceManager 为应用程序 ApplicationMaster 申请资源,并与某个 NodeManager 通信启动第一个 Container,以启动 ApplicationMaster;
  3. ApplicationMaster 与 ResourceManager 注册进行通信,为内部要执行的任务申请资源,一旦得到资源后,将于 NodeManager 通信,以启动对应的 Task;
  4. 所有任务运行完成后,ApplicationMaster 向 ResourceManager 注销,整个应用程序运行结束。

时序图

在这里插入图片描述

解释说明

  1. 客户端向资源管理器(ResourceManager)提交应用程序,包括应用程序的元数据(如名称、优先级等)、启动应用主程序(ApplicationMaster)所需的资源(如内存、CPU等)和启动命令等信息。
  2. 资源管理器接受应用程序,并为其分配一个全局唯一的应用程序 ID(ApplicationId),然后将其放入一个提交队列中等待调度。
  3. 调度器(Scheduler)根据应用程序的优先级、资源需求和集群的资源情况,为应用程序分配一个节点管理器(NodeManager)来运行应用主程序。
  4. 资源管理器将应用主程序的启动命令发送给相应的节点管理器,节点管理器在一个容器(Container)中启动应用主程序。
  5. 应用主程序在启动后,向资源管理器注册自己,并保持心跳通信。注册时,应用主程序会提供一个 URL,供客户端查询应用程序的运行状态。
  6. 应用主程序根据应用程序的逻辑,向资源管理器申请更多的容器来运行应用程序的任务(Task)。申请时,可以指定容器所需的资源量和位置偏好等约束条件。
  7. 调度器根据申请和集群状况,为应用主程序分配一批容器,并将分配结果返回给应用主程序。
  8. 应用主程序与运行容器的节点管理器通信,将任务的启动命令发送给节点管理器,节点管理器在相应的容器中启动任务。
  9. 任务在运行过程中,可以通过分布式文件系统(如 HDFS)或者分布式缓存(如 HBase)来读写数据。任务运行结束后,会向应用主程序汇报状态和结果。
  10. 应用主程序收集和监控所有任务的运行状态和结果,如果有任务失败,可以重新申请容器来启动新的任务。当所有任务都完成后,应用主程序向资源管理器注销并释放所有容器,然后结束自己的运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值