Yarn的FIFO Scheduler(先进先出调度器)的什么优缺点?
在Hadoop YARN中,FIFO Scheduler(先进先出调度器) 是最基础、最简单的一种资源调度策略。顾名思义,它的核心逻辑就是“先到先得”,所有提交的应用程序都会被放入一个全局的队列中,调度器严格按照作业提交的先后顺序来分配资源。
以下是FIFO调度器的优缺点详细分析:
一、 优点 (Advantages)
- 逻辑极其简单、易于理解
- 调度规则直白,没有任何复杂的计算逻辑,就是排队。排在最前面的作业优先获取集群资源。
- 配置极简(开箱即用)
- 不需要像 Capacity Scheduler 或 Fair Scheduler 那样去配置多队列、权重、资源上下限或用户权限。对于只需跑通任务的测试环境来说,维护成本几乎为零。
- 系统调度开销极小
- 因为不需要计算公平性(Fairness)、不需要处理复杂的队列层级关系、也不需要进行资源抢占(Preemption),ResourceManager (RM) 在进行调度时的 CPU 和内存开销非常低。
二、 缺点 (Disadvantages)
- “队头阻塞”现象(最致命缺点)
- 如果队列最前面是一个需要消耗大量资源且运行时间极长的“大作业”(例如需要跑好几个小时的数据挖掘任务),它会占满集群的绝大部分资源。
- 排在后面的“小作业”(可能只需要几秒钟就能跑完的简单查询)必须一直等待,直到大作业释放资源。这会导致小作业的响应时间长得令人无法忍受(即饿死现象 Starvation)。
- 不支持多租户(缺乏资源隔离)
- 现代大数据集群通常是由多个部门、多个用户共享的。FIFO调度器只有一个单队列,无法为不同部门或不同业务线划分和保障资源,容易出现“一个部门的错误代码拖垮整个公司集群”的情况。
- 缺乏优先级和灵活性
- 所有的作业一视同仁,没有“VIP通道”。如果线上出现紧急Bug需要立刻跑一个修复任务,在FIFO机制下,它也必须乖乖排在所有已提交的任务之后,无法插队。
- 资源利用率可能不佳
- 尽管YARN允许在第一个作业资源需求未占满集群时,将剩余资源分给第二个作业,但在纯FIFO模式下,整体集群的吞吐量和资源利用效率通常低于支持更细粒度划分的调度器。
三、 适用场景
基于上述的优缺点,FIFO调度器的适用场景非常局限:
- 不适合: 生产环境、多用户共享集群、包含长短作业混合的集群。
- 适 合:
- 个人的开发和测试环境。
- 规模极小、只有单一业务线、且所有作业运行时间都差不多的纯批处理集群。
💡 扩展补充
正因为 FIFO 调度器的缺点在企业级应用中过于致命,Hadoop 社区开发了另外两种主流调度器来替代它,这也是目前生产环境中的绝对主流:
- Capacity Scheduler(容量调度器): 默认存在于开源 Hadoop 中,支持多队列,预先为各个队列划分资源比例,保证各部门都有最低资源可用,同时允许资源借用。
- Fair Scheduler(公平调度器): CDH(Cloudera)发行版的默认调度器,动态平衡所有正在运行的作业的资源,让所有作业都能“公平”地获得份额,极大地提升了小作业的响应速度。