持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第3天
一、本篇笔记重点内容:
调度系统演进
集中式调度系统 两层调度系统 共享状态调度系统 分布式调度系统
二、详细知识点介绍:
调度系统演进
集中式调度系统: 中心式调度系统融合了资源管理和任务调度,有一个中心式的 JobTracker 负责进行集群资源的合理分配、任务的统一调度、集群计算节点信息的统计维护、任务执行过程中的状态管理等。
-
优点:
- JobTracker 能够感知集群中所有资源和任务的执行状态,能够进行全局最优的资源分配和调度,避免任务间的干扰,适当进行任务抢占,保证任务计算效率和服务质量;
- 架构模型简单,只有一个全局的管理者负责进行所有管理。
-
缺点:
- JobTracker 作为集群的中心,存在单点瓶颈问题,不能支持大规模集群;
- 内部实现异常复杂,一个调度器中需要实现所有的功能模块,可扩展性差;
- 负载变更会导致系统需要进行不断的迭代,这将增加系统的复杂性,不利于后期的维护和扩展;
- 只支持单类型的任务,MR 类型的批处理任务;
两层调度系统:将资源管理和任务调度解耦。集群资源管理器负责维护集群中的资源信息并将资源分配给具体的任务,任务管理器负责申请资源并将申请到的资源根据用户逻辑进行细分和具体的任务调度。
-
优点:
- 资源管理器只负责资源分配,任务调度由应用完成,提高了系统的扩展性;
- 任务调度逻辑由具体的任务完成,能够提供对不同类型任务的支持;
- 内部实现模块化,利于维护和扩展;
-
缺点:
- 任务无法感知全局的资源情况,只能基于request/offer来进行资源获取,无法有效避免异构负载之间的性能干扰问题;
- 任务调度和资源管理解耦不利于实现多任务间的优先级抢占;
- 所有任务的资源请求都需要资源管理器进行处理,此外其还需要与节点管理器之间维持通信,导致资源管理器存在单点问题;
共享状态调度系统
基本原理:是一个半分布式的架构,通过共享集群状态为应用提供全局的资源视图,并采用乐观并发机制进行资源申请和释放,来提高系统的并发度。
-
优点:
- 支持全局最优调度;
- 能够一定程度的提高并发度;
-
缺点:
- 高并发资源请求下会造成频繁的资源竞争;
- 不利于资源分配的公平性;
- 资源全局副本维护模块存在单点瓶颈;
分布式调度系统
基本原理:分布式调度器之间没有通讯协作,每个分布式调度器根据自己最少的先验知识进行最快的决策,每个调度器单独响应任务,总体的执行计划与资源分配服从统计意义。
-
优点:提高吞吐量和并发度
-
缺点:
- 调度质量得不到保障;
- 资源非公平分配;
- 不能支持多租户管理;
- 不能避免不同任务之间的性能干扰;
三、引用参考&推荐书目:
-
《Hadoop 技术内幕 - 深入解析 YARN 架构设计与实现原理》
-
《Apache Hadoop YARN: Yet Another Resource Negotiator》