ResourceManager 简介

简介

ResourceManager(RM),RM 是全局的资源管理器,负责整个系统的资源管理和分配。主要由以下两部分组成:

  • 调度器:根据容量、队列限制条件将系统资源分配给各个应用。
    • 资源分配的单位是 container,container 是一个动态资源单位,它将内存、CPU、磁盘、网络等资源封装在一起,从而限定了资源使用量。
    • 调度器是一个可插拔的组件,用户可以自己定制,也可以选择 Fair 或 Capacity 调度器.
  • 应用程序管理器:负责管理所有应用程序的以下内容:
    • 应用提交
    • 与调度器协商资源以启动 AM.
    • 监控 AM 运行状态并在失败时重启它

RM 内部架构

  • 交互模块:RM 对普通用户、管理员、Web 提供了三种对外服务:
    • ClientRMService:为普通用户提供服务,它处理来自客户端的各种 RPC,比如:
      • 应用提交
      • 终止应用
      • 获取应用状态等
    • AdminService:为管理员提供的独立接口,主要目的是为了防止大量普通用户请求阻塞管理员通道,提供如下功能:
      • 动态更新节点列表
      • 更新 ACL 列表
      • 更新队列信息等
    • WebApp:提供一个 Web 界面来让用户更友好的获知集群和应用的状态
  • NM 管理模块:用来管理 NM 的模块,主要包含以下三个组件:
    • ResourceTrackerService:处理来自 NodeManager 的请求,主要包括:
      • 注册:注册是 NM 启动时发生的行为,NM 提供的信息包括:
        • 节点 ID、可用资源上限信息等.
      • 心跳:心跳是周期行为
        • NM 提供的信息包括:
          • 各个 Container 运行状态、运行的 Application 列表、节点健康状态等.
        • RM 返回的信息包括:
          • 等待释放的 Container 列表、Application 列表等.
    • NMLivelinessMonitor:监控 NM 是否活着,如果 NM 在一定时间(默认 10m)内未上报心跳,则认为它死掉,需要移除.
    • NodesListManager:维护正常节点和异常节点列表,管理 exclude(类似黑名单)和 include(类似白名单)节点列表,
      这两个列表均是在配置文件中设置的,可以动态加载。
  • AM 管理模块:主要是用来管理所有 AM,主要包括:
    • ApplicationMasterService(AMS):处理来自 AM 的请求,包括:
      • 注册:是 AM 启动时发生的行为,信息包括:
        • AM 的启动节点、对外 RPC 端口、tracking URL 等.
      • 心跳:是周期行为
        • AM 提供的信息包括:所需资源的描述、待释放 Container 列表、黑名单列表等.
        • AMS 返回的信息包括:新分配的 Container、失败的 Container、待抢占的 Container 列表等
    • AMLivelinessMonitor:监控 AM 是否活着,如果 AM 在一定时间(默认 10m)内未上报心路,
      则认为它死掉,它上面正在运行的 Container 将会被置为失败状态,而 AM 本身会被分配到另一个节点上(用户可以指定重试次数,默认 5)
    • ApplicationMasterLauncher:与某个 NM 通信,要求它为某个应用程序启动 AM.
  • 应用管理模块:主要是各个应用外围的管理,并不涉及到应用内部
    • ApplicationACLsManager:管理应用程序访问权限,包含两部分:
      • 查看权限:主要用于查看应用程序基本信息
      • 修改权限:主要用于修改应用程序优先级、杀死应用程序等
    • RMAppManager:管理应用程序的启动和关闭.
    • ContainerAllocationExpirer:当 AM 收到 RM 新分配的 Container 后,必须在一定时间(默认 10m)内在对应的 NM 上启动该 Container,
      否则 RM 将强制回收该 Container,而一个已经分配的 Container 是否该被回收则是由 ContainerAllocationExpirer 决定和执行的
  • 状态机管理模块:RM 使用有限状态机维护有状态对象的生命周期,状态机的引入使得 Yarn 的架构设计清晰,RM 内部的状态机有:
    • RMApp:维护一个应用程序的整个运行周期,包括从启动到运行结束的整个过程
      • 由于一个 APP 的生命周期可能会启动多个运行实例(Attempt),RMApp 维护的是所有的这些 Attempt
    • RMAppAttempt:一次应用程序的运行实例的整个生命周期,可以理解为 APP 的一次尝试运行
    • RMContainer:一个 Container 的运行周期,包括从创建到运行结束的整个过程。
      • RM 将资源封装成 Container 发送给应用程序的 AM,AM 在 Container 描述的运行环境中启动任务
      • Yarn 不支持 Container 重用,一个 Container 用完后会立刻释放
    • RMNode:维护了一个 NM 的生命周期,包括从启动到运行结束的整个过程
  • 安全模块: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
  • Hadoop

    Hadoop 是由 Apache 基金会所开发的一个分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。

    82 引用 • 122 回帖 • 620 关注
1 操作
zeekling 在 2023-11-25 22:57:05 更新了该帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
zeekling
应无所住,而生其心。 --《金刚经》 吾生也有涯,而知也无涯。 --《庄子》 西安