hadoop资源调度策略方案选择备忘录

来源:互联网 发布:宠物商店淘宝 编辑:程序博客网 时间:2024/06/07 13:26

今天原来项目交接的同事过来询问hadoop集群运维相关的事情,重新检查了一下集群的各个配置项,由于时间太久,对其中yarn的资源调度配置细节有点记不清了,因此查阅了调度器相关资料,同时回忆了当初调度策略方案的选择过程,整理之后在这里记一下来龙去脉,以防今后又忘掉了。

1. 为什么需要调度器

集群运行多个任务时,当各个任务需要的资源总和超过集群的总资源时,就需要调度器来决定资源的具体分配。

2. 都有哪些调度器

集群跑的是hadoop2,hadoop2使用yarn进行资源管理,yarn共有3种调度器:FIFO Scheduler ,Capacity Scheduler,Fair Scheduler。yarn默认采用Capacity Scheduler。

3个调度器的区别请看下图:


上图假设job1需要集群全部的资源。

FIFO Scheduler会把所有资源都给先提交的job1,后面提交的任务将全部阻塞。

Capacity Scheduler可以配置多个队列,每个队列分配固定数量的资源,上图当中job1提交到队列A,job2提交到队列B,因此两个job可以同时执行。但这里有个问题,当其他队列空闲时,job1也只能使用队列A的资源,空闲资源白白浪费。

Fair Scheduler会为所有运行的job动态调整资源分配,当只有job1运行时,把所有资源都给job1,当job2开始运行时,分配一半的资源给job2,job2结束后,又把空闲下来的资源分配给了job1。这样既能保证小任务及时完成,又能避免资源的空闲浪费。

当然,现在Fair Scheduler的配置已经非常灵活了,也可以像Capacity Scheduler那样支持多个队列,多个队列的场景下资源分配如下图:


有没有看起来好像很不错的样子?

3. 我采用的方案

我们的集群是项目专用的,因此不需要多个队列进行资源隔离。但每天运行很多个任务,有些任务资源需求量较大运行时间较长,有些任务资源需求量很少运行时间很少,我们希望小任务能够尽快跑完,大任务之间资源分配能够比较均匀。只有Fair Scheduler满足这样的需求。具体配置在yarn-site.xml文件。主要有两个配置项:

yarn.resourcemanager.scheduler.class

指定调度器,这里配 org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler

yarn.scheduler.fair.user-as-default-queue

任务提交没有指定队列时,是否使用用户名作为队列名,由于集群是项目专用,不需要多个队列,因此设置成false



0 0
原创粉丝点击