调度器是 ResourceManager 中最核心的组件,它决定了集群资源如何分配给多个竞争中的应用程序,
其设计直接影响着集群的吞吐量、公平性和利用率。
核心概念
在深入原理之前,先理解几个关键概念:
资源模型:YARN 将资源抽象为 Container,每个 Container 代表一定量的 内存(MB) 和 CPU 虚拟核心(vCores)。
资源请求:ApplicationMaster 以 <资源量, 数量, 位置偏好> 的形式向调度器申请资源。例如:<2 GB, 1 vCore, 10个, /data/node1>。
位置偏好:为了实现“计算向数据移动”,AM 会优先请求存储有数据的节点(Node-Local),其次是同一机架(Rack-Local),最后是任意节点(Off-Switch)。
队列:资源被组织成队列,通常对应不同的部门、团队或项目。每个队列有特定的资源容量限制。
调度器核心工作原理
调度器的工作就像一个不断循环的 “决策引擎”,其基本工作流程可以概括为以下步骤:
下面我们来详细解析这个流程中的关键环节。
1. 触发时机:节点心跳
调度决策不是主动轮询,而是由 事件驱动 的,最主要的触发事件是 NodeManager 的心跳。
当 NM 向 RM 发送心跳时,它会报告该节点的 可用资源(可用的内存和 CPU)。
调度器一收到这个心跳,就会立即尝试将这部分“刚刚释放出来”的资源分配给等待中的应用程序。
2. 决策层次:队列 -> 应用 -> 容器
调度器做出“该把资源给谁”的决策是一个两层筛选过程:
选择队列:在层次化的队列结构中,根据调度策略(容量、公平等)决定哪个队列应该获得这批资源。
选择应用:在选定的队列中,根据策略(FIFO、公平排序等)决定哪个应用程序有资格获得资源。
分配容器:为选定的应用程序分配一个具体的 Container,并满足其位置偏好。
3. 资源分配与位置感知
这是调度器中最复杂的环节之一,因为它需要在 调度效率 和 数据本地性 之间做权衡。
优先级:调度器会优先满足 Node-Local 请求,其次是 Rack-Local,最后是 Off-Switch。
延迟调度:为了达到更好的本地性,调度器可能会 “跳过” 当前不满足本地性要求的应用,
即使它是队列中最优先的应用。它会等待一小段时间(比如几次心跳),期望出现一个更匹配的节点。
如果等待超时,则会放松约束,接受 Rack-Local 或 Off-Switch。
4. 资源抢占
这是保证公平性和服务等级协议的关键机制。
场景:当一个队列资源不足,而另一个队列超量使用资源时发生。
过程:调度器会向超量队列中正在运行的 Container 发送 SIGTERM 信号,要求其优雅退出。
如果 Container 在一定时间内没有自行退出,RM 会通过 NM 强制杀死它(SIGKILL)。
目的:释放出的资源可以分配给资源不足的队列,确保其获得承诺的最小资源量。
三种主要调度器策略的差异
YARN 提供了多种调度器实现,它们的核心区别就在于上述 决策层次 中使用的算法不同。
特性 |FIFO Scheduler |Capacity Scheduler |Fair Scheduler
核心思想 |先到先得,简单队列 |静态资源划分,专队专享,弹性借用 |动态资源分配,按需共享,实时公平
队列组织 |单个队列 |层次化队列,每个队列有保证的容量 |层次化队列,每个队列有最小共享资源
资源分配 |严格按照提交顺序 |1. 队列内:通常为FIFO |1. 队列内:公平共享(Fair Sharing)
|2. 队列间:保证各自容量,空闲资源可被其他队列弹性使用 |2. 队列间:公平共享,满足最小共享量
优点 |简单,低延迟 |资源隔离性好,适合多租户生产环境;灵活性高 |资源利用率高,公平性好,小应用能快速获得资源
缺点 |不适合共享集群,大应用会阻塞小应用 |配置复杂;资源可能闲置(如果不配置弹性) |缺乏严格的资源隔离;动态分配可能带来不确定性
适用场景 |已淘汰,仅用于学习 |Hadoop 默认调度器,多团队、多项目共享集群 |对交互式查询和短期作业友好的混合工作负载
#总结:调度器的工作原理精髓
事件驱动:以 NodeManager 心跳为触发点,进行增量式调度。
层次化决策:通过“选队列 -> 选应用 -> 分配容器”的两级筛选模型,将复杂的全局调度问题分解。
权衡艺术:在 公平性、数据本地性、集群利用率 和 响应速度 等多个目标之间进行权衡。例如,
延迟调度用一点点调度延迟换取更好的数据本地性,从而提升整体吞吐量。
资源保障与回收:通过 容量/最小共享 保证基本服务,通过 抢占 机制在资源紧张时强制执行这些保证。
理解 YARN 调度器的工作原理,对于调优集群性能、合理规划队列资源和解决生产环境中的资源竞争问题至关重要。
#在实际应用中,Capacity Scheduler 因其良好的隔离性和稳定性,成为了大多数生产集群的首选。
YARN调度器的工作原理
最新推荐文章于 2025-11-23 21:07:11 发布
857

被折叠的 条评论
为什么被折叠?



