这一篇博文是【大数据技术●降龙十八掌】系列文章的其中一篇,点击查看目录:大数据技术●降龙十八掌
-
系列文章:
-
【十八掌●内功篇】第六掌:YARN之架构和原理
【十八掌●内功篇】第六掌:YARN之ResourceManager
【十八掌●内功篇】第六掌:YARN之NodeManager
【十八掌●内功篇】第六掌:YARN之ApplicationMaster
【十八掌●内功篇】第六掌:YARN之YARN资源调度器
ApplicationMaster实际上是特定计算框架的一个实例,每种计算框架都有自己独特的ApplicationMaster,负责与ResourceManager协商资源,并和NodeManager协同来执行和监控Container。MapReduce只是可以运行在YARN上一种计算框架。
1、 AM的职能
Application启动后,将负责以下任务:
(1) 初始化向ResourceManager报告自己的活跃信息的进程
(2) 计算应用程序的的资源需求。
(3) 将需求转换为YARN调度器可以理解的ResourceRequest。
(4) 与调度器协商申请资源
(5) 与NodeManager协同合作使用分配的Container。
(6) 跟踪正在运行的Container状态,监控它的运行。
(7) 对Container或者节点失败的情况进行处理,在必要的情况下重新申请资源。
2、 报告活跃
(1) 注册
ApplicationMaster执行的第一个操作就是向ResourceManager注册,注册时AM告诉RM它的IPC的地址和网页的URL。
IPC地址是面向客户端的服务地址;网页URL是AM的一个Web服务的地址,客户端可以通过Http获取应用程序的状态和信息。
注册后,RM返回AM可以使用的信息,包括:YARN接受的资源的大小范围、应用程序的ACL信息。
(2) 心跳
注册成功后,AM需要周期性地发送心跳到RM确认他还活着。参数yarn.am.liveness-monitor.expiry配置AM心跳最大周期,如果RM发现超过这个时间还没有收到AM的心跳,那么就判断AM已经死掉。
3、 资源需求
AM所需要的资源分为静态资源和动态资源。
(1) 静态资源
在任务提交时就能确定,并且在AM运行时不再变化的资源是静态资源,比如MapReduce程序中的Map的数量。
(2) 动态资源
AM在运行时确定要请求数量的资源是动态资源。
4、 调度
当AM的资源请求数量达到一定数量或者到了心跳时,AM才会发送心跳到RM,请求资源,心跳是以ResourceRequest形式发送的,包括的信息有:resourceAsks、ContainerID、containersToBeReleased。
RM响应的信息包括:新分配的Container列表、已经完成了的Container状态、集群可用的资源上限。
5、 启动Container
(1) AM从RM那里得到了Container后就可以启动Container了。
(2) AM首先构造ContainerLaunchContext对象,包括分配资源的大小、安全令牌、启动Container执行的命令、进程环境、必要的文件等
(3) AM与NM通讯,发送StartContainerRequest请求,逐一或者批量启动Container。
(4) NM通过StartContainerResponse回应请求,包括:成功启动的Container列表、失败的Container信信息等。
(5) 整个过程中,AM没有跟RM进行通信。
(6) AM也可以发送StopContainerRequest请求来停止Container。
6、 完成的Container
当Container执行结束时,由RM通知AM Container的状态,AM解释Container状态并决定如何继续操作。所以YARN平台只是负责为计算框架提供Container信息。
7、 AM的失败和恢复
当AM失效后,YARN只负责重新启动一个AM,任务恢复到失效前的状态是由AM自己完成的。AM为了能实现恢复任务的目标,可以采用以下方案:将任务的状态持久化到外部存储中。比如:MapReduce框架的ApplicationMaster会将已完成的任务持久化,失效后的恢复时可以将已完成的任务恢复,重新运行未完成的任务。
8、 AM退出
当AM完成任务后,应该显式地向RM发送FinishApplicationRequest进行注销。
这一篇博文是【大数据技术●降龙十八掌】系列文章的其中一篇,点击查看目录:大数据技术●降龙十八掌