任务调度优化经验:细分队列,合理利用调度策略,提升集群资源利用率
相信目前很多生产系统,都使用了多租户模式管理所有进驻大数据平台的应用方,租户模式的优势,想必大家都有所了解,它能够管控租户权限,弹性分配资源,提高数据安全性及计算资源利用率,但Yarn集群中租户的资源调度器分为FairScheduler和CapacityScheduler,本文将探究生产任务的资源开销差异较大、且存在不同优先级的情况下,如何选择调度器,以及配置怎样的调度方式更为合理。
首先简单了解一下两种调度器
FairScheduler---公平调度
根据我的经验及理解,相对于CapacityScheduler调度器,FairScheduler在配置过程上更加简单,但资源调度上就相对粗暴一些;
CapacityScheduler---容器调度
该调度器在资源调度上更加精细,但配置过程相对复杂一些。
由于两种调度器实现的功能并无太大差异,对于生产系统来讲,两种调度器均可使用,笔者本次主要针对FairScheduler调度器进行实践及探究。
实践探究
FairScheduler支持Fair(公平排序算法)和Fifo(先进先出)两种调度模式,来实现各个租户和任务之间资源的调度,然而如何行之有效的结合Fair和Fifo两种模式来平衡任务差异性与资源利用最大化之间的关系,是多租户平台需要探究的问题,经过长期的生产实践及相关测试,笔者得出如下结论:
-
模式设置:队列之间使用Fifo(先进先出)模式,队列内部任务之间使用Fifo(先进先出)模式
实践结论:这种组合模式下,队列内部先提交的任务可获得充足的资源以最快速度完成,但在空闲资源较少的情况时,后提交任务的队列需要等待前面队列中任务释放资源后才可启动,若前面队列任务执行较慢,则会大大增加后续队列所有任务的等待时间,从而增加后续队列所有任务的延迟时间; -
模式设置:队列之间使用Fifo(先进先出)模式,队列内部任务之间使用Fair(公平排序)模式
实践结论:这种模式与第一种模式存在同样的问题,后续队列中的任务在资源较为紧张的情况下延时过大。 -
模式设置:队列之间使用Fair(公平排序)模式,队列内部任务之间使用Fifo(先进先出)模式
实践结论:这种模式下,无论各个队列提交任务的次序如何,均可在抢占时间到达时,获得配置的最小资源量供队列内任务运行,而队列内部的Fifo模式也可保证先提交的任务获得充足的资源,以最快速度完成,且整体资源利用率较高。 -
模式设置:队列之间使用Fair(公平排序)模式,队列内部任务之间使用Fair(公平排序)模式
实践结论:这种模式与第三种类似,可以保证每个队列提交的任务都可以获取资源,但队列内部任务之间的Fair模式,使得任务之间公平的获取资源,如果出现队列内同一时间段提交大量任务的情况,则这些任务各自获取的资源量就很小,也就意味着队列内所有任务执行速度都非常缓慢,即所有任务都会出现较大延时。
综上所述,在任务差异性较大的多租户平台中,较为合理的调度模式为上述第三种:在队列间使用Fair(公平排序)模式,队列内部的任务间使用Fifo(先进先出)模式。