欢迎投稿

今日深度:

hadoop调度器,

hadoop调度器,


hadoop调度器

概述
Hadoop中常见的调度器有三种,分别为:
FIFO调度器、公平调度器Fair Scheduler、容量调度器Capacity Scheduler(计算能力调度器)

它的作用是将系统中空闲的资源按一定策略分配给作业。在Hadoop中,调度器是一个可插拔的模块,用户可以根据自己的实际应用要求设计调度器。

基本作用和调度器考虑因素
Hadoop调度器的基本作用就是根据节点资源(slot)使用情况和作业的要求,将任务调度到各个节点上执行。
考虑因素:
作业优先级。作业的优先级越高,它能够获取的资源(slot数目)也越多。Hadoop 提供了5种作业优先级,分别为 VERY_HIGH、HIGH、NORMAL、 LOW、VERY_LOW,通过mapreduce.job.priority属性来设置。
作业提交时间。顾名思义,作业提交的时间越早,就越先执行。
作业所在队列的资源限制。调度器可以分为多个队列,不同的产品线放到不同的队列里运行。不同的队列可以设置一个边缘限制,这样不同的队列有自己独立的资源,不会出现抢占和滥用资源的情况。
默认FIFO调度器
FIFO是Hadoop中默认的调度器,也是一种批处理调度器。它先按照作业的优先级高低,再按照到达时间的先后选择被执行的作业。

比如,一个 TaskTracker 正好有一个空闲的 slot,此时 FIFO 调度器的队列已经排好序,就选择排在最前面的任务 job1,job1 包含很多 map task和reduce task。假如空闲资源是 map slot,我们就选择 job1 中的 map task。假如 map task0 要处理的数据正好存储在该 TaskTracker 节点上,根据数据的本地性,调度器把 map task0 分配给该TaskTracker。FIFO 调度器整体就是这样一个过程。

TaskTracker:是Map-Reduce集群中每台机器都有的一个部分,他做的事情主要是监视自己所在机器的资源情况。

容量调度器Capacity Scheduler(计算能力调度器)
支持多个队列,每个队列可配置一定的资源量,每个队列采用FIFO调度策略,为了防止同一个用户的作业独占队列中的资源,该调度器会对同一用户提交的作业所占资源量进行限定。调度时,首先按以下策略选择一个合适队列:计算每个队列中正在运行的任务数与其应该分得的计算资源之间的比值,选择一个该比值最小的队列;然后按以下策略选择该队列中一个作业:按照作业优先级和提交时间顺序选择,同时考虑用户资源量限制和内存限制。

比如我们分为三个队列:queueA、queueB和queueC,每个队列的 job 按照到达时间排序。假如这里有 100 个slot,queueA 分配 20% 的资源,可配置最多运行 15 个task,queueB 分配 50% 的资源,可配置最多运行 25 个task,queueC 分配 30% 的资源,可配置最多运行 25 个task。这三个队列同时按照任务的先后顺序依次执行,比如,job11、job21和job31分别排在队列最前面,是最先运行,也是同时运行。

公平调度器Fair Scheduler
同计算能力调度器类似,支持多队列多用户,每个队列中的资源量可以配置,同一队列中的作业公平共享队列中所有资源。

​ 比如有三个队列:queueA、queueB和queueC,每个队列中的 job 按照优先级分配资源,优先级越高分配的资源越多,但是每个 job 都会分配到资源以确保公平。在资源有限的情况下,每个 job 理想情况下获得的计算资源与实际获得的计算资源存在一种差距, 这个差距就叫做缺额。在同一个队列中,job的资源缺额越大,越先获得资源优先执行。作业是按照缺额的高低来先后执行的,而且可以看到上图有多个作业同时运行

缺额调度算法

​ 主要思想是:将作业的优先级转化成权重,优先级越高权重越大,而权重越大,获得的资源越多,通过权重计算出的资源就是“公平共享量”,这是理想状态下,每个作业应得到资源量,而在实际情况下,可能获取不到这些资源,因而可以得到一个“理想和现实之间的差距”,为了是这个差距更能体现实际意义,又将时间融合进去,即:“理想和现实之差乘以时间”,这就是缺额(缺额是累加的,如果一个作业为获得资源,其缺额会随着时间不段增大,直到能够排到队列前头)。每次出现空闲资源时,优先选择缺额大的作业,以便达到公平调度的目的。

公平调度器vs容量调度器

公平调度是以pool为单位分配任务slots的,容量调度以queue的方式分配tasktracker的,当都只有一个job的时候,两种调度器都可以利用整个集群的资源;

Pool:资源池,或者作业池。 每个pool里有一定量的资源(管理员配置),每个用户属于某个pool,其作业可使用这个pool中的资源,可限定每个pool中最大并发作业数和每个用户最多提交作业数。默认情况下,一个linux用户对应一个pool,而管理员也可以配以一个linux group对应一个pool。pool实际上也可以称为group或者队列。

​ 在每个pool内部可以是以FIFO方式调度也可以是公平方式调度,但是在队列内部只能是以FIFO方式调度,这是公平调度和容量调度的一个区别;虽然在队列内部可以设置优先级但是并不支持抢占,在pool内部是支持抢占的,就是可以为某个pool(通常是生产上的用户)分配最低的任务slot,当这个pool得不到最低的资源的时候他就会kill其他的job的task以使自己获得最低的资源,这并不会引起其他的job的失败,因为job也是master-slaver的结构,也是容错的。

整体总结

公平调度:以pool为单位分配任务;每个内部采用FIFO调度;队列可以设置优先级但不支持抢占;

容量调度:以队列为单位分配任务;每个内部可以采用FIFO调度也可以采用公平方式调度;pool内部支持抢占;

www.htsjk.Com true http://www.htsjk.com/Hadoop/41393.html NewsArticle hadoop调度器, hadoop调度器 概述 Hadoop中常见的调度器有三种,分别为: FIFO调度器、公平调度器Fair Scheduler、容量调度器Capacity Scheduler(计算能力调度器) 它的作用是将系统中空闲的资源按...
相关文章
    暂无相关文章
评论暂时关闭