hadoop

董西城《深入解析YARN》-第5章 RespourceManag

2020-04-03  本文已影响0人  fat32jin

5.1 Resourcemanager 概述

image.png

❑与客户端交互,处理来自客户端的请求;
❑启动和管理ApplicationMaster,并在它运行失败时重新启动它;
❑管理NodeManager,接收来自NodeManager的资源汇报信息,并向NodeManager下达管理指令(比如杀死Container等);
❑资源管理与调度,接收来自ApplicationMaster的资源申请请求,并为之分配资源。

5.2 Resourcemanager 内部架构

RM内部架构
5.2 用户交互模块

5.2.1 ClientRMServiceClientRMService是一个RPC Server,为来自客户端的各种RPC请求提供服务。从实现角度看,它是一个实现了ApplicationClientProtocol协议的服务,其定义如下:

5.2.2 AdminService与ClientRMService类似,AdminService也是一个RPC Server,但它的服务对象是管理员。在YARN中,管理员列表由属性yarn.admin.acl指定(在yarn-site.xml中设置),默认情况下,属性值为“*”,表示所有用户都是管理员。从实现角度看,它是一个实现了ResourceManagerAdministrationProtocol协议的服务,其定义如下

5.3 ApplicationMaster管理
image.png

AM运行过程中,需要周期性地通过RPC函数ApplicationMasterProtocol#allocate与RM通信主要有以下三个作用:

❑请求资源;
❑获取新分配的资源;
❑形成周期性心跳,告诉RM自己还活着。

5.4 NodeManager管理

(1)NMLivelinessMonitor该服务周期性遍历集群中所有NodeManager,如果一个NodeManager在一定时间(可通过参数yarn.nm.liveness-monitor.expiry-interval-ms配置,默认为10min)内未汇报心跳信息,则认为它死掉了,它上面所有正在运行的Container将被置为运行失败
(2)NodesListManagerNodesListManager管理exlude(类似于黑名单)和inlude(类似于白名单)节点列表
(3)ResourceTrackerServiceResourceTrackerService实现了RPC协议ResourceTracker,负责处理来自各个NodeManager的请求,请求主要包括注册和心跳两种,

5.5 Application管理

(1)ApplicationACLsManagerApplicationACLsManager负责管理应用程序的访问权限,包含两部分权限:查看权限和修改权
(2)RMAppManagerRMAppManager负责应用程序的启动和关闭
(3)ContainerAllocationExpirer当一个AM获得一个Container后,YARN不允许AM长时间不对其使用

5.6 状态机管理

在YARN ResourceManager内部,共有4类状态机,分别是RMApp、RMAppAttempt、RMContainer和RMNode。其中,前2类状态机维护了一个应用程序相关的生命周期,包括Application生命周期、一次运行尝试的生命周期;RMContainer则维护了分配出去的各个资源的使用状态;RMNode维护了一个NodeManager(一个节点上可以有多个NodeManager)的生命周期


image.png

Application Attempt的生命周期与ApplicationMaster的生命周期基本上是一致的:一个Application内部所有任务均由ApplicationMaster维护和管理,ApplicationMaster本身需要占用一个Container,而这个Container由ResourceManager为其申请和启动。一旦ApplicationMaster成功启动,它就会与ResourceManager通信,为它内部的任务申请Container。如果ApplicationMaster重新启动,则意味着一个新的Application Attempt被启动,换句话说,一个Application Attempt的“生死存亡”与ApplicationMaster的“命运”紧紧绑定在一起。

5.6.1 RMApp状态机

RMApp是ResourceManager中用于维护一个Application生命周期的数据结构,它的实现是RMAppImpl类,该类维护了一个Application状态机,记录了一个Application可能存在的各个状态(RMAppState)以及导致状态间转换的事件(RMAppEvent)

image.png
image.png
5.6.2 RMAppAttempt状态机
image.png
image.png
5.6.3 RMContainer状态机
image.png
image.png
5.6.4 RMNode状态机

RMNode是ResourceManager中用于维护一个节点生命周期的数据结构,它的实现是RMNodeImpl类,该类维护了一个节点状态机,记录了节点可能存在的各个状态以及导致状态间转换的事件。当某个事件发生时,RMNodeImpl会根据实际情况进行节点状态转移,同时触发一个行为


image.png
image.png

5.7 几个常见行为分析

5.7.1 启动ApplicationMaster
ApplicationMaster启动流程
上一篇下一篇

猜你喜欢

热点阅读