介绍
Fair Scheduler是公平分配YARN资源的方法之一。默认情况下,Fair Scheduler只基于内存来保证公平分配,通过配置yarn.scheduler.fair.cpu-scheduling-enabled
为true,可以基于内存+CPU来分配资源。
当只有一个application在运行时,它可以使用整个集群资源。当其他app提交后,资源会被释放并分配给新来的app,这样就能保证大家拥有大致相同的资源。Fair Scheduler还可以根据每个app的权重、优先级来确定分配资源的比例。
Fair Scheduler基于队列概念,在队列和队列之间公平分配资源。默认default队列,用户也可以指定队列,还可以根据用户来配置其能够提交的队列。在每个队列中,也有一个资源调度策略,默认是基于内存的公平策略,还有FIFO等。
除了公平分配资源,Fair Scheduler还能控制每个队列最少获取资源数,来保证该队列下的app至少能获取到的资源。不过当该队列的任务没有用到最小资源数,那这些资源也会分给其他队列使用。(看到这里可能会有疑惑,资源不够时需要evict其他队列share的资源,这个策略是如何实现的?之后会有写Fair Scheduler原理的文章)
Fair Scheduler还可以限制每个用户和每个队列正在执行的app数,这个特性会在当某个用户同时提交大量app时,会产生过多的intermediate数据或者上下文切换。限制app执行数,对于后来的app不会直接失败,而是排在队列中等待。
可插拔策略实现的分级队列
分级队列不难理解,有一级、二级、三级…N级队列,如ÿ