0. 前言
Sparrow是一个完全去中心化的调度器,系统中没有中央处理单元,所有的调度器之间也不需要进行通信,根据自己调度器中保留的信息进行调度决策。这种调度方式是集群管理系统的一大改革,其被称为分布式调度器。主要用来减少调度延时和提高并发度的考量,其使用场景一般针对类似Spark这样的任务,每个task的执行时间较短,但是有大量可以并行执行的task。
sparrow出现的初衷就是为了在spark任务上进行调度,事实证明其效果显著,目前已经开源。
1. 背景
- 大型数据分析框架的发展出现下面趋势:任务的执行时间越来越短,可以并行执行的任务数量增加。例如MR类型的任务执行需要10min,而spark类型的任务只需要100ms。并且这种趋势将会持续下去。
- 数据框架的迭代就要求调度器能够支持每秒数百万任务的调度,并且保证调度延时和可用性。普通的集中式调度器和两层调度器都不能够满足这些苛刻的要求。所以符合条件的系统必须要满足高吞吐量,低调度延时和高可用。
- 基于这样的需求我们提出了Sparrow,一个去中心化的调度器,通过使用多个调度器来提交吞吐量降低延时,保证可用性。如果一个调度器失效,用户可以将任务提交到其他调度器上执行。在调度策略上我们采用the power fo two-choice经典分布式系统负载平衡算法并加以优化。
- The power of two-choice 是非常经典的结论,M. Mitzenmacher有一系列文章描述,拓展了这个结论,有兴趣的同学可以参考一下。它的基本含义是:对于向N个队列调度N个任务这样的情景,每次调度可以采用完全随机选择一个队列的办法,那么系统的不平衡度(用最长的队列中的任务数目来描述)量级是logN/loglogN。如果做一个简单的扩展,每次随机的时候,随机出两个队列,并且把任务调度到较短的那个队列,这么系统的不平衡度变为loglogN/log2。可以清楚的看到,这是一个量级的变化。当然你也可以随机3个,那么相应的不平衡度为loglogN/log3,可以看到这只是一个非常小的,常数量级的变化。所以,"两个选择"在调度的平衡性上最有力量,这也被成为 The Power of Two Choice。此种方式还有一个好处就是所有调度器随机选择队列,都可以并行执行。在科技的海洋里有时候一个小小的改进都能推动一项技术有质的变化,当这个结论出现的时候我们或许会觉得稀松平常,但是想要发现这个结论却需要有深厚的知识储备。
- 到目前我们大致了解了sparrow的思想,我们可能会疑惑,多个调度器是怎么协同来进行资源调度的,如果发生资源竞争怎么办?sparrow采用了三种方法来对调度过程进行优化。Batch sampling, Late binding, Policies and constraints
- Batch sampling。Sparrow会假设数据节点每个worker针对每个计算框架都有一个long-running的exe