yarn 的 applicationMaster 介绍
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 会将已完成的任务持久化,失效后的恢复时可以将已完成的任务恢复,重新运行未完成的任务。
评论