请描述 Yarn Capacity Scheduler 的工作机制,并解释它是怎样实现资源公平分配的?
考察说明
考察对 Yarn 资源调度器核心组件之一 Capacity Scheduler 的理解,以及其资源分配策略。
回答思路
- 【回答框架 1】Capacity Scheduler 是 Yarn 的多租户调度器,以队列为单位组织资源。每个队列可配置容量百分比,确保资源按比例分配给不同租户或应用。其设计目标是在保证容量前提下提高集群利用率,并支持弹性资源使用。
- 【回答框架 2】工作流程:ResourceManager 维护队列层级和容量信息。当有任务提交时,应用被分配到指定队列,调度器根据队列容量、当前使用量和资源需求,在活动节点上进行资源分配。分配时优先满足队列最小容量,再按剩余资源比例分配。
- 【回答框架 3】弹性与公平:若队列资源未用满,可暂时让其他队列使用其空闲容量,但会保障每个队列的最小容量和资源上限。弹性分配不是硬性保证,而是基于权重和优先级。实际分配还考虑用户权限、应用优先级和资源需求(如内存、CPU)。
- 【回答框架 4】资源分配单元:Container 是资源分配的基本单位,调度器根据作业请求和节点可用资源动态创建 Container。分配算法考虑节点局部性,尽量将任务分配到数据所在节点。
- 【关键点 1】Capacity Scheduler 以队列为资源容器,每个队列有容量上限和使用权重。
- 【关键点 2】资源分配优先满足队列最小容量,空闲容量可按比例弹性共享。
- 【关键点 3】公平性体现在不超卖队列容量,且通过权重调节不同队列获取额外资源的能力。
- 【关键点 4】分配粒度是 Container,支持细粒度内存和 CPU 资源。
- 【易错点 1】不能保证严格公平,实际比例受权重、优先级和资源需求影响。
- 【易错点 2】弹性分配可能导致资源抢占,需配置资源抢占策略(如 preemption)。
- 【易错点 3】当队列均满时,可能无法保证每个队列的最小容量,需依赖调度器策略。