简介
ResourceManager(RM),RM 是全局的资源管理器,负责整个系统的资源管理和分配。主要由以下两部分组成:
- 调度器:根据容量、队列限制条件将系统资源分配给各个应用。
- 资源分配的单位是 container,container 是一个动态资源单位,它将内存、CPU、磁盘、网络等资源封装在一起,从而限定了资源使用量。
- 调度器是一个可插拔的组件,用户可以自己定制,也可以选择 Fair 或 Capacity 调度器.
- 应用程序管理器:负责管理所有应用程序的以下内容:
- 应用提交
- 与调度器协商资源以启动 AM.
- 监控 AM 运行状态并在失败时重启它
RM 内部架构
- 交互模块:RM 对普通用户、管理员、Web 提供了三种对外服务:
- ClientRMService:为普通用户提供服务,它处理来自客户端的各种 RPC,比如:
- 应用提交
- 终止应用
- 获取应用状态等
- AdminService:为管理员提供的独立接口,主要目的是为了防止大量普通用户请求阻塞管理员通道,提供如下功能:
- 动态更新节点列表
- 更新 ACL 列表
- 更新队列信息等
- WebApp:提供一个 Web 界面来让用户更友好的获知集群和应用的状态
- ClientRMService:为普通用户提供服务,它处理来自客户端的各种 RPC,比如:
- NM 管理模块:用来管理 NM 的模块,主要包含以下三个组件:
- ResourceTrackerService:处理来自 NodeManager 的请求,主要包括:
- 注册:注册是 NM 启动时发生的行为,NM 提供的信息包括:
- 节点 ID、可用资源上限信息等.
- 心跳:心跳是周期行为
- NM 提供的信息包括:
- 各个 Container 运行状态、运行的 Application 列表、节点健康状态等.
- RM 返回的信息包括:
- 等待释放的 Container 列表、Application 列表等.
- NM 提供的信息包括:
- 注册:注册是 NM 启动时发生的行为,NM 提供的信息包括:
- NMLivelinessMonitor:监控 NM 是否活着,如果 NM 在一定时间(默认 10m)内未上报心跳,则认为它死掉,需要移除.
- NodesListManager:维护正常节点和异常节点列表,管理 exclude(类似黑名单)和 include(类似白名单)节点列表,
这两个列表均是在配置文件中设置的,可以动态加载。
- ResourceTrackerService:处理来自 NodeManager 的请求,主要包括:
- AM 管理模块:主要是用来管理所有 AM,主要包括:
- ApplicationMasterService(AMS):处理来自 AM 的请求,包括:
- 注册:是 AM 启动时发生的行为,信息包括:
- AM 的启动节点、对外 RPC 端口、tracking URL 等.
- 心跳:是周期行为
- AM 提供的信息包括:所需资源的描述、待释放 Container 列表、黑名单列表等.
- AMS 返回的信息包括:新分配的 Container、失败的 Container、待抢占的 Container 列表等
- 注册:是 AM 启动时发生的行为,信息包括:
- AMLivelinessMonitor:监控 AM 是否活着,如果 AM 在一定时间(默认 10m)内未上报心路,
则认为它死掉,它上面正在运行的 Container 将会被置为失败状态,而 AM 本身会被分配到另一个节点上(用户可以指定重试次数,默认 5) - ApplicationMasterLauncher:与某个 NM 通信,要求它为某个应用程序启动 AM.
- ApplicationMasterService(AMS):处理来自 AM 的请求,包括:
- 应用管理模块:主要是各个应用外围的管理,并不涉及到应用内部
- ApplicationACLsManager:管理应用程序访问权限,包含两部分:
- 查看权限:主要用于查看应用程序基本信息
- 修改权限:主要用于修改应用程序优先级、杀死应用程序等
- RMAppManager:管理应用程序的启动和关闭.
- ContainerAllocationExpirer:当 AM 收到 RM 新分配的 Container 后,必须在一定时间(默认 10m)内在对应的 NM 上启动该 Container,
否则 RM 将强制回收该 Container,而一个已经分配的 Container 是否该被回收则是由 ContainerAllocationExpirer 决定和执行的
- ApplicationACLsManager:管理应用程序访问权限,包含两部分:
- 状态机管理模块:RM 使用有限状态机维护有状态对象的生命周期,状态机的引入使得 Yarn 的架构设计清晰,RM 内部的状态机有:
- RMApp:维护一个应用程序的整个运行周期,包括从启动到运行结束的整个过程
- 由于一个 APP 的生命周期可能会启动多个运行实例(Attempt),RMApp 维护的是所有的这些 Attempt
- RMAppAttempt:一次应用程序的运行实例的整个生命周期,可以理解为 APP 的一次尝试运行
- RMContainer:一个 Container 的运行周期,包括从创建到运行结束的整个过程。
- RM 将资源封装成 Container 发送给应用程序的 AM,AM 在 Container 描述的运行环境中启动任务
- Yarn 不支持 Container 重用,一个 Container 用完后会立刻释放
- RMNode:维护了一个 NM 的生命周期,包括从启动到运行结束的整个过程
- RMApp:维护一个应用程序的整个运行周期,包括从启动到运行结束的整个过程
- 安全模块:RM 自带了非常全面的权限管理机制,主要包括:
- ClientToAMSecretManager
- ContainerTokenSecretManager
- ApplicationTokenSecretManager
- 调度模块:主要包含一个组件 ResourceScheduler。
- 资源调度器,它按照一定的约束条件(比如队列容量限制等)将集群中的资源分配给各个应用程序,目前主要考虑内存和 CPU。
- ResourceScheduler 是一个可插拔式的模块,自带三个调度器,用户可以自己定制。
- FIFO:先进先出,单用户。
- Fair Scheduler:公平调度器(FairScheduler 基本上具备其它两种的所有功能)
- Capacity Scheduler:容量调度器
RM 事件与事件处理器
Yarn 采用了事件驱动机制,而 RM 是的实现则是最好的例证。所有服务和组件均是通过中央异步调度器组织在一起的,
不同组件之间通过事件交互,从而实现了一个异步并行的高效系统。
服务
组件名称 | 输出事件类型 | 用途 |
---|---|---|
ClientRMService | RMAppAttemptEvent |
|
RMAppEvent RMNodeEvent |
||
NMLivelinessMonitor | RMNodeEvent | |
ResourceTrackerService | RMNodeEvent RMAppAttemptEvent |
|
AMLivelinessMonitor | RMAppAttemptEvent | |
ContainerAllocationExpirer | SchedulerEvent |
事件处理器
组件名称 | 处理的事件类型 | 输出事件类型 | 用途 |
---|---|---|---|
ApplicationMasterLauncher | AMLauncherEvent | - | |
RMAppManager | RMAppManagerEvent | RMAppEvent | |
NodesListManager | NodesListManagerEvent | RMNodeEvent RMAppEvent |
|
RMApp | RMAppEvent | RMAppAttemptEvent RMNodeEvent SchedulerEvent RMAppManagerEvent | |
RMAppAttempt | RMAppAttemptEvent | SchedulerEvent RMAppAttemptEvent RMAppEvent AMLauncherEvent RMNodeEvent | |
RMNode | RMNodeEvent | RMAppEvent SchedulerEvent NodesListManagerEvent RMNodeEvent |
|
ResourceScheduler | SchedulerEvent | RMAppEvent RMAppAttemptEvent | |
RMContainer | RMContainerEvent | RMAppEvent RMAppAttemptEvent RMNodeEvent |
事件处理器实现类
-
RMApp 实现类:
- ApplicationEventDispatcher
- RMAppImpl
-
RMAppAttempt 实现类
- ApplicationAttemptEventDispatcher
- RMAppAttemptImpl
-
RMNode 实现类
- NodeEventDispatcher
- RMNodeImpl
-
ResourceScheduler 实现类
- EventDispatcher
- FairScheduler
-
RMContainer 实现类
- RMContainerImpl
- RMContainerImpl
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于