【YARN】详解 YARN 中的 ResourceManager

本文详细介绍了ApacheYARN架构中的ResourceManager,包括其核心功能、与NodeManager和ApplicationMaster的通信机制,以及各模块如用户交互、NM管理、AM管理、Application管理、状态机和安全模块的职责。重点阐述了事件驱动的特性,展示了YARN如何通过资源管理和调度实现高效处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.ResourceManager 核心功能

YARN 通过分配资源和调度任务来执行所有处理活动。 Apache Hadoop YARN 架构由以下主要组件组成:

  • 资源管理器Resource Manager):在主守护进程上运行并管理集群中的资源分配。
  • 节点管理器Node Manager):它们在从属守护进程上运行,负责在每个数据节点上执行任务。
  • 应用程序主控Application Master):管理各个应用程序的用户作业生命周期和资源需求。它与节点管理器一起工作并监视任务的执行。
  • 容器Container):单个节点上的 RAM、CPU、网络、HDD 等资源的封装。

在这里插入图片描述
ResourceManager 的核心功能:集群资源统一管理和调度

  • 管理 NodeManager,并接受资源汇报信息
  • 管理 ApplicationMaster,并分配资源
  • 响应客户端,并处理请求

更多可参考:《了解 YARN 架构的基础知识

2.通信(与三个角色通信)

  • NodeManager 通信(ResourceTracker)
    • 注册、心跳(汇报节点健康状况)、Container 运行状态
    • 领取执行指令(启动 / 清理 / 删除 Container)
  • ApplicationMaster 通信(ApplicationMasterProtocol)
    • 注册、心跳
    • 申请 / 释放资源
  • 客户端 通信(ApplicationClientProtocol)
    • 提交 / 查询 / 控制应用程序

3.模块简介

在这里插入图片描述

3.1 用户交互模块

  • ClientRMService:处理普通用户的请求(提交、终止程序以及查询程序状态等)。
  • AdminService:处理管理员的请求(更新节点 / ACL列表、更新队列信息等),防止大量的普通用户请求导致管理命令饿死。
  • WebApp:通过 Web 页面展示集群资源使用情况和程序使用情况。

3.2 NM 管理模块

  • NMLivelinessMonitor:监控 NM 状态。若没有定期(默认10min)汇报心跳,则从集群中移除。
  • NodesListManager:维护正常节点和异常节点列表。两个列表都是在配置文件中设置的,可动态加载。
  • ResourceTrackerService:处理 NM 的请求。

3.3 AM 管理模块

  • AMLivelinessMonitor:监控 AM 状态。若没有定期(默认10min)汇报心跳,则认为它死掉了,它上面运行的 Container 都被置为失败状态。AM 会被重新分配到另一个节点上执行(用户指定重试次数,默认为 2)。
  • ApplicationMasterLauncher:与 NM 进行通信,下发命令启动 ApplicationMaster
  • ApplicationMasterServiceAMS):处理来自 AM 的请求。
    • 注册:ApplicationMaster 启动节点对外 RPC 端口号和 Tracking URL 等信息。
    • 心跳:汇报所需资源描述、待释放的 Container 列表、黑名单列表等。返回值是新分配的 Container、失败的 Container、待抢占的 Container 列表等信息。

3.4 Application 管理模块

  • ApplicationACLsManager:管理应用程序访问权限。
    • 查看权限:查看应用程序基本信息。
    • 修改权限:修改程序优先级、杀死应用进程等。
  • RMAppManager:管理应用程序的启停。
  • ContainerAllocationExpirer:决定 Container 是否被回收以及执行。当 AM 收到 RM 新分配的 Container 后,必须在一定时间内(默认10min)在对应的 NM 启动该 Container,否则 RM 将强制回收该 Container。

3.5 状态机模块

  • RMApp:维护一个应用程序的生命周期。
  • RMAppAttempt:维护 RMApp 产生的小任务生命周期。
  • RMContainer:维护 Container 的生命周期。目前的 Container 不支持重用,看看后期是否可重用。
  • RMNode:维护 NodeManager 的生命周期。

3.6 安全模块

由以下子模块组成:

  • ClientToAMSecretManager
  • ContainerTokenSecretManager
  • ApplicationTokenSecretManager

3.7 资源分配模块

ResourceScheduler:负责将资源分配给应用程序

  • 批处理资源调度器:FIFO
  • 多用户调度器:Fair SchedulerCapacity Scheduler

4.模块详解​​

4.1 用户交互模块

在这里插入图片描述

ClientRMService 和 AdminService 两个服务分别处理普通用户和管理员的请求。

  • ClientRMService:本质是 RPC Server(实现 ApplicationClientProtocol),给客户端提供 RPC 服务。ClientRMService 中保留了 RM 上下文对象 RMContext,中央异步调度器(AsyncDispatcher)通过 RMContext 来获取节点列表、队列组织和应用列表等信息来响应客户端请求。
  • AdminService:本质也是RPC Server,不过服务对象是管理员。yarn.admin.acl设置的,默认是*,表示所有用户都是管理员

4.2 NM 管理模块

在这里插入图片描述
由以下三个组件共同组成

  • NMLivelinessMonitor
    • 当前正在运行的 NM 会保存在 RM 的一个数据结构中,NMLivelinessMonitor 就周期遍历,若一个 NM 在一定时间(默认10分钟)未汇报心跳,则认为其挂了。
    • 心跳周期(默认十分钟):​​​yarn.nm.liveness-monitor.expiry-interval-ms​​
  • NodesListManager:管理 RM 的节点
    • 指定白名单文件:​​yarn.resourcemanager.nodes.include-path​​​
    • 指定黑名单文件:​​yarn.resourcemanager.nodes.exclude-path​​
    • 再执行以下命令让配置生效 ​​bin/yarn rmadmin -refreshNodes​​
  • ResourceTrackerService
    • 本质是 RPC Server,处理 NM 请求(通过 ApplicationMasterProtocol 协议)。
    • 注册(单次):NM 启动时发送该请求,携带节点 ID、可用资源的上限和对外开放的 HTTP 端口。
    • 心跳(周期):包含运行的 Application 列表、节点健康状况和 Container 运行状态等。返回待释放的 Container 列表、Application 列表。

4.3 AM 管理模块

在这里插入图片描述
由以下三个组件共同组成:

  • ApplicationMasterLauncher:既是服务也是事件处理器,响应 AMLauncherEvent 事件(启动 / 清理 AM)
    • 启动 AM。通过 ContainerManagementProtocol 跟 NM 通信,将启动 AM 所需的信息如启动命令、JAR 包、环境变量等信息封装成 StartContainerRequest 对象发送给 NM。
    • 清理 AM。通过 ContainerManagementProtocol 跟 NM 通信,要求其杀死 AM。
  • ApplicationMasterService:负责跟 AM 通信,处理 AM 的请求(通过 ApplicationMasterProtocol 协议)
    • 注册(单次):AM 启动时发送该请求,携带所在节点、RPC 端口和 Tracking URL 等信息。
    • 心跳(周期):包含请求资源的类型、待释放的 Container 列表等。AMS 返回新分配的 Container、失败的 Container 等信息。
    • 清理(单次):AM 向 RM 发送清理请求,来回收 / 清理各种资源。回收 AM 所占的 Container 和将 AM 从 AMLivelinessMonitor 中删除。
  • AMLivelinessMonitor
    • 周期性遍历所有 AM,如果有 AM 没有定期发送心跳则认为它挂了,它所持有的 Container 全部设置为失败。RM 会重新为它分配资源并在另一个节点上启动。
    • 心跳时间(默认十分钟):​​yarn.am.liveness-monitor.expiry-interval-ms​​​
    • AM 失败重试次数(默认两次):​​yarn.resourcemanager.am.max-attempts​​

4.4 Application 管理模块

在这里插入图片描述

管理 Application 的生命周期、权限等。

  • ApplicationACLsManager
    • 管理应用程序查看 / 修改权限
    • 通过该参数配置权限 ​​​yarn.admin.acl​​
  • RMAppManager
    • 负责应用程序的启停
    • 将应用程序放到应用程序列表中
    • 将应用程序从 RMStateStore 中移除
    • 通过该参数设置最大应用数:​​yarn.resourcemanager.max-completed-applications​​
  • ContainerAllocationExpirer
    • 管理 Container 的使用
    • 如果某个 AM 拿到 Container 后一段时间内都没使用,则会强制回收(提高利用率)
    • 等待时间 :​​yarn.resourcemanager.rm.container-allocation.expiry-interval-ms​​

5.特点

事件驱动:中央异步调度器将组件 / 服务组织在一起,各个组件 / 服务的输出都是事件,组件 / 服务之间的交互都是通过事件,从而实现了异步并行的高效系统。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

G皮T

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值