2016年1月28日星期四

Hadoop Fair Scheduler

Hadoop Fair Scheduler

Hadoop Fair Scheduler

公平调度器(Fair Scheduler)是一个用于Hadoop的插件式的Map/Reduce调度器,它提供了一种共享大规模集群的方法。

引言

  公平调度是一种赋予作业(job)资源的方法,它的目的是让所有的作业随着时间的推移,都能平均的获取等同的共享资源。当单独一个作业在运行时,它将使用整个集群。当有其它作业被提交上来时,系统会将任务(task)空闲时间片(slot)赋给这些新的作业,以使得每一个作业都大概获取到等量的CPU时间。与Hadoop默认调度器维护一个作业队列不同,这个特性让小作业在合理的时间内完成的同时又不“饿”到消耗较长时间的大作业。它也是一个在多用户间共享集群的简单方法。公平共享可以和作业优先权搭配使用——优先权像权重一样用作为决定每个作业所能获取的整体计算时间的比例。

  公平调度器按资源池(pool)来组织作业,并把资源公平的分到这些资源池里。默认情况下,每一个用户拥有一个独立的资源池,以使每个用户都能获得一份等同的集群资源而不管他们提交了多少作业。按用户的Unix群组或作业配置(jobconf)属性来设置作业的资源池也是可以的。在每一个资源池内,会使用公平共享(fairsharing)的方法在运行作业之间共享容量(capacity)。你也可以给予资源池相应的权重,以不按比例的方式共享集群。

除了提供公平共享方法外,公平调度器允许赋给资源池保证(guaranteed)最小共享资源,这个用在确保特定用户、群组或生产应用程序总能获取到足够的资源时是很有用的。当一个资源池包含作业时,它至少能获取到它的最小共享资源,但是当资源池不完全需要它所拥有的保证共享资源时,额外的部分会在其它资源池间进行切分。

  在常规操作中,当提交了一个新作业时,公平调度器会等待已运行作业中的任务完成以释放时间片给新的作业。但,公平调度器也支持在可配置的超时时间后对运行中的作业进行抢占。如果新的作业在一定时间内还获取不到最小的共享资源,这个作业被允许去终结已运行作业中的任务以获取运行所需要的资源。因此抢占可以用来保证“生产”作业在指定时间内运行的同时也让Hadoop集群能被实验或研究作业使用。另外,作业的资源在可配置的超时时间(一般设置大于最小共享资源超时时间)内拥有不到其公平共享资源(fair share)的一半的时候也允许对任务进行抢占。在选择需要结束的任务时,公平调度器会在所有作业中选择那些最近运行起来的任务,以最小化被浪费的计算。抢占不会导致被抢占的作业失败,因为Hadoop作业能容忍丢失任务,这只是会让它们的运行时间更长。

  最后,公平调度器还可以限制每用户和每资源池的并发运行作业数量。当一个用户必须一次性提交数百个作业时,或当大量作业并发执行时,用来确保中间数据不会塞满集群上的磁盘空间,这是很有用的。设置作业限制会使超出限制的作业被列入调度器的队列中进行等待,直到一些用户/资源池的早期作业运行完毕。系统会根据作业优先权和提交时间的排列来运行每个用户/资源池中的作业。

理念

公平调度器的设计主要基于以下几个考虑:

  • 为Hadoop集群里的“小作业”,即所需执行时间较少的作业,提供一个“公平”的资源竞争机制,使它们即使在需要和一些规模较大的作业共享资源的时候也能够较快地得到执行。与之相对,在Hadoop默认的先进先出调度机制下则有可能出现大作业占据资源而使小作业长时间等待的局面。
  • 确保某些特定的用户或者生产环境(Production)应用程序任何时间都可以得到足够的资源,这样即使它们和其它的测试或实验程序共享集群资源,也能够随时运行。
  • 易于管理和配置。
  • 支持运行时配置,不需要重启集群。

主要机能

资源池(Pool)

资源池是实现公平调度的一个重要的机能。公平调度器会把作业划分到不同的资源池里,原则上,资源池之间的资源实现共享,每个资源池内部的作业也实现资源共享。更具体的来说,资源池具有以下特性:

  • 资源公平地划分到每个资源池。
  • 每个资源池内,可以使用公平共享的方法来调度作业,也可以按照先进先出的方法来调度。不同的资源池可以配置不同的调度方式。
  • 默认情况下,每个用户都分到相同量的集群资源,同一用户提交的作业共享资源。但也可以通过设置jobconf属性来指定作业进入哪个资源池。
  • 没有被标示的作业将会进入一个默认的资源池
  • 可以对资源池设置权重。例如,权重为2的资源池可以获得2倍于权重为1的资源池所享有的资源。

最小共享量(MinimumShare)

通常情况下,资源池会分配到相同份额的map/reduceslot。不过,通过给指定的资源池设置最小(map/reduceslot)共享量,即使在该资源池理论上应分配到的公平共享量少于最小共享量的时候,也可以确保这个资源池里的作业始终获得足够的资源来运行。最小共享量有以下特性: – 资源池的公平共享量永远不会小于最小共享量。

  • 如果有资源池的当前共享量小于最小共享量,它会优先得到下一个可用的slot。
  • 可以对资源池设置一个抢占超时(通常建议设置一个较高的数值,比如10分钟)。当超过一定时间资源池仍未能获得足够的slot以满足最小共享量的时候,允许调度器停止(kill)其它作业的任务以释放额外的共享量。
  • 当资源池里没有活动的作业的时候,最小共享量不被保留,将会被分给其它的资源池。

作业优先级

作业优先级用于帮助进行资源池内的作业调度。

  • 在先进先出的资源池内,作业的顺序首先按优先级,然后按提交的时间来确定。
  • 在公平共享的资源池内,作业优先级作为权重来控制作业应获得的共享量。普通优先级对应权重为1.0,每高一个优先级权重就乘以2。

调度算法

调度算法的基本规则是:当有slot空闲下来的时候,把它分配给最需要的资源池,这样可以确保所有的资源池都得到相同数量的slot。但是,如果一个资源池的需求低于它的公平共享量,那么多余的slot会被平均分给其它的资源池。另外,在此基础上还有一些补充规则,比如:

  • 如前所述,资源池的权重将会影响到它能分配到的资源。
  • 获得资源低于最小共享量的资源池可以优先得到空闲的slot。资源低于最小共享量的优先于资源高于最小共享量。对于同为低于最小共享量的情况,比较两者的缺额百分比(距离最小共享量的缺额/最小共享量),缺额百分比更大的优先。

没有评论:

发表评论