前言
本文隶属于专栏《大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!
本专栏目录结构和参考文献请见大数据技术体系
YARN 应用提交过程
Application 在 Yarn 中的执行过程,整个执行过程可以总结为三步:
- 应用程序提交
- 启动应用的ApplicationMaster实例
- ApplicationMaster 实例管理应用程序的执行

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

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

492

被折叠的 条评论
为什么被折叠?



