文
章
目
录
章
目
录
1.FIFO策略:
说明:
假设有两个任务,第一个是任务需要大量资源;第二个需要少量资源,但是紧急重要任务,此时第二个需要等待第一个执行完,才能执行第二个。
弊端:
1)由于顺序执行任务,如果第一个是大量资源,后续任务需要等待。
2)没有做到资源共享。
FIFO Scheduler:从字面不难看出就是先进先出策略,所有的任务都放在一个队列中,只有执行完一个任务后,才会进行下一个。这种调度方式最简单,但真实场景中并不推荐,因为会有很多问题,比如如果有大任务独占资源,会导致其他任务一直处于 pending 状态等。
2.容量调度策略:
说明:
1)属于共享调度策略。
2)将集群资源,给队列分配部分资源,每个队列互不干涉
弊端:
某个队列突然来个大的任务,那这个大的任务不会占用其他队列资源,执行时间长,效率低。
配置弹性队列:允许队列超过自己配置的容量,但仅在其他队列没有占用资源的情况下。
Capacity Scheduler:也就是所谓的容量调度,这种方案更适合多租户安全地共享大型集群,以便在分配的容量限制下及时分配资源。采用队列的概念,任务提交到队列,队列可以设置资源的占比,并且支持层级队列、访问控制、用户限制、预定等等配置。不过对于资源占用比需要不断的摸索与权衡
3.公平调度策略:
说明:
队列间可以互相共享资源,如果权重高的任务来了,权重低的任务会分给权重高的任务部分资源,必要时,可kill掉权重低的任务。
配置公平调度策略
启用公平调度策略,配置属性yarn.resourcemanager.scheduler.class
<property> <name>yarn.resourcemanager.scheduler.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value> </property>
Fair Scheduler:就是公平调度器,能够公平地共享大型集群中的资源,Fair 调度器会为所有运行的 job 动态的调整系统资源。当只有一个 job 在运行时,该应用程序最多可获取所有资源,再提交其他 job 时,资源将会被重新分配分配给目前的 job,这可以让大量 job 在合理的时间内完成,减少作业 pending 的情况。可见 Fair Schedule 比较适用于多用户共享的大集群
3.Fair Scheduler 和 Capacity Scheduler 的比较
随着 Hadoop 版本逐渐演化,Fair Scheduler 和 Capacity Scheduler 的功能越来越完善,因此两个调度器的功能也逐渐趋近,由于 Fair Scheduler 支持多种调度策略,因此可以认为 Fair Scheduler 具备了 Capacity Scheduler 的所有功能。
4.调度策略的选择
通过分析常见的几种调度器,选用 Fair Schedule 调度器更适合共享型大集群,资源调度并没有最优解,需要不断探索实践去寻找适合目前现状的方案;在发展的不同阶段遇到不同的问题,通过解决问题逐渐去优化和完善。