一、传统调度方法
随着大数据处理作业的迫切需要,学术界和工业界不断探索着高效的调度方法。尤其是Hadoop、Spark等开源的大数据处理框架逐渐普及,更多的研究者有更好的机会来测试所设计的调度方法。
不过,大多数调度方法是根据某一特定场景或计算平台的某一缺陷而设计的,在实际生产环境中较少用到。因此,以下重点介绍目前被普遍使用的调度策略。
1、FIFO策略
几乎所有的大数据处理平台的默认调度方法会采取FIFO策略。该策略总是优先执行最早被用户提交的作业。优点是简单、容易执行;缺点是调度性能极大程度收到作业提交顺序的影响。
若先提交的作业执行时间长,而后提交的作业执行时间短,那么FIFO策略依然会优先执行需要时间较长的作业,时间短的则需等待,从而延长完成时间。
2、最短作业优先策略
最短作业优先的调度策略也会常被人使用。该策略总是优先调度执行时间最短的作业,从而能减少平均作业完成时间。
尽管最短作业优先的调度策略有较好的性能,但是该策略需要事先知道待调度作业的执行时间长度,否则不能很好的发挥作用。
然而目前的大数据处理平台不会预测用户提交作业的执行时间,因此最短作业优先的策略很难得到应用。
3、公平调度策略
公平调度策略是由Facebook公司设计的一种将集群资源平均地分配给每个作业的一种调度策略,以便让每个作业得到集群资源、能够执行。该调度策略需要事先按照用户名、UNIX用户组等配置属性来创建作业池。
公平调度策略会按照作业的属性把作业分组到不同的池里,每个作业池有一个最小的资源份额,同一个作业池的作业会享有相同的资源份额。
在同一个作业池,作业得到的资源份额也是不同的。如果一个作业所需要的资源数量和实际得到的资源数量相差巨大,那么该作业可以获得比其他作业更多的资源。
4、容量调度策略
容量调度策略是由雅虎公司为共享型计算机集群设计的调度策略。
容量调度策略会创建多个作业队列,每个队列的资源容量是可以人为设置的。当用户提交新的作业时,该调度策略会根据每个队列额作业负载和资源容量来为新的作业选择合适的队列。
在每个队列里,作业会按照FIFO策略调度。没有作业待执行的队列会把空闲的资源容量交给其他队列作业使用。
5、延迟调度策略
延迟调度策略也是由Facebook公司设计的用于提升数据本地性的一种策略。
在大数据处理作业的执行过程中,数据通常是被分散的存储于各计算节点。
延迟调度将数据的本地性分为不同级别,节点级别的本地性表示计算任务和执行任务所需的数据都在同一节点上,机架级别的本地性表示任务和数据分别在同一机架下的不同节点。
延迟调度策略会优先调度本地性最高的计算任务。如果没有满足最高数据本地性的计算任务,那么延迟调度策略会延后执行计算任务。
二、难点和挑战
1、大数据处理作业的网络流协同调度问题
对于具有复杂依赖关系的大数据处理作业,作业执行过程会涉及到多个计算阶段,这些计算阶段之间存在图状的依赖关系。
只有当所依赖计算阶段的全部任务执行完成后,才可执行下一阶段的任务。
以细粒度的方式协同调度网络流和计算任务会产生很大的计算复杂性,因此面向网络流和作业的协同调度优化问题是难于求解的。
2、由于分配过量资源而导致作业完成时间延长
现在的数据处理常常会为了加快作业完成时间而向计算集群请求过量资源。
由于大数据框架的处理特性,分配过量计算资源会使得并行执行的计算任务产生较大的网络通信和磁盘读写等系统开销,最终也会导致作业完成时间延长。
考虑到数据中心集群里的计算资源通常会被多个大数据处理作业共享,如果给个别作业分配过量计算资源的话,不仅会延长该作业的完成时间,而且可能会导致其他作业得不到充足的计算资源,最终使得平均作业完成时间增加。
3、面向大数据处理的计算集群的系统吞吐量受限
调度策略会直接影响大数据平台的计算性能。
系统吞吐量是一项重要的性能指标。提升系统吞吐量的调度策略不仅要考虑作业执行时间,还要考虑作业的资源需求。
然而,现有的作业调度策略很难解决这一挑战。