写点什么

yarn 的 applicationMaster 介绍

发布于: 2021 年 04 月 30 日

ApplicationMaster 实际上是特定计算框架的一个实例,每种计算框架都有自己独特的 ApplicationMaster,负责与 ResourceManager 协商资源,并和 NodeManager 协同来执行和监控 Container。MapReduce 只是可以运行在 YARN 上一种计算框架。

1 applicationMaster 的职能

Application 启动后,将负责以下任务:


  • 初始化向 ResourceManager 报告自己的活跃信息的进程 (注册)

  • 计算应用程序的的资源需求。

  • 将需求转换为 YARN 调度器可以理解的 ResourceRequest。

  • 与调度器协商申请资源

  • 与 NodeManager 协同合作使用分配的 Container。

  • 跟踪正在运行的 Container 状态,监控它的运行。

  • 对 Container 或者节点失败的情况进行处理,在必要的情况下重新申请资源。

2 报告活跃

  • 注册


ApplicationMaster 执行的第一个操作就是向 ResourceManager 注册,注册时 AM 告诉 RM 它的 IPC 的地址和网页的 URL。

IPC 地址是面向客户端的服务地址;网页 URL 是 AM 的一个 Web 服务的地址,客户端可以通过 Http 获取应用程序的状态和信息。

注册后,RM 返回 AM 可以使用的信息,包括:YARN 接受的资源的大小范围、应用程序的 ACL 信息。


  • 心跳


注册成功后,AM 需要周期性地发送心跳到 RM 确认他还活着。参数 yarn.am.liveness-monitor.expiry 配置 AM 心跳最大周期,如果 RM 发现超过这个时间还没有收到 AM 的心跳,那么就判断 AM 已经死掉。

3 资源需求

​ AM 所需要的资源分为静态资源和动态资源。


  • 静态资源

  • 在任务提交时就能确定,并且在 AM 运行时不再变化的资源是静态资源,比如 MapReduce 程序中的 Map 的数量。

  • 动态资源

  • AM 在运行时确定要请求数量的资源是动态资源。

4 调度任务

​ 当 AM 的资源请求数量达到一定数量或者到了心跳时,AM 才会发送心跳到 RM,请求资源,心跳是以 ResourceRequest 形式发送的,包括的信息有:resourceAsks、ContainerID、containersToBeReleased。


​ RM 响应的信息包括:新分配的 Container 列表、已经完成了的 Container 状态、集群可用的资源上限。

5 启动 container

  • AM 从 RM 那里得到了 Container 后就可以启动 Container 了。

  • AM 首先构造 ContainerLaunchContext 对象,包括分配资源的大小、安全令牌、启动 Container 执行的命令、进程环境、必要的文件等

  • AM 与 NM 通讯,发送 StartContainerRequest 请求,逐一或者批量启动 Container。

  • NM 通过 StartContainerResponse 回应请求,包括:成功启动的 Container 列表、失败的 Container 信信息等。

  • 整个过程中,AM 没有跟 RM 进行通信。

  • AM 也可以发送 StopContainerRequest 请求来停止 Container。

6 完成的 container

​ 当 Container 执行结束时,由 RM 通知 AM Container 的状态,AM 解释 Container 状态并决定如何继续操作。所以 YARN 平台只是负责为计算框架提供 Container 信息。

7 AM 的失败和恢复

​ 当 AM 失效后,YARN 只负责重新启动一个 AM,任务恢复到失效前的状态是由 AM 自己完成的。AM 为了能实现恢复任务的目标,可以采用以下方案:将任务的状态持久化到外部存储中。比如:MapReduce 框架的 ApplicationMaster 会将已完成的任务持久化,失效后的恢复时可以将已完成的任务恢复,重新运行未完成的任务。

用户头像

专注于大数据技术研究 2020.11.10 加入

运营公众号:五分钟学大数据。大数据领域原创技术号,深入大数据技术

评论

发布
暂无评论
yarn的applicationMaster介绍