00:00
好,接下来我们来看一下公平调度器,那公平调度器呢,它是Facebook开发的一个多用户调度器,刚才这个容量调度器是哪个公司开发的,是不是这个是雅虎啊,一个是雅虎,一个是。Facebook OK,那么来看一下公器,它有哪些特点呢?打开。首先你看哦,这里面也是多个队列。对吧,那么这里面要求哎,队列A20%,队列B50%,队列C30%。那对下面仍然是有两个用户,一个苍老师,一个宋老师。对吧,那公平道器的原则什么呢?说同队列所有任务共享资源。在时间尺上对吧,哎,时间尺度上获得公平的资源,它就一个字公平两个字哈,公平。讲究人人均分。那你看啊,这里面这是有四个任务对吧,它是20%的资源。那四个任务,那相当于每一个人占用5%的资源。
01:03
诶很均匀吧,那再来,如果我是50%的资源,我跑了五个任务。那每个任务呢,分配10%的资源,那再有这是有30%的资源,我跑五个任务,那每个任务呢,再用6%的资源。所有任务均分。那下跟这个容量调数器对比一下啊,对比的G说容量调数器跟它相同的特点是多队列,也是支持多队列,这是第一条。第二条,容量的保障,它也是保证每一个队列有一个最低资源的一个保障,比如说你总资源不够的情况下,我会让每一个队列雨露均沾。哎,保证它有最小资源,另一个呢,是资源使用的一个上限,对吧,这是它资源使用的上限。再来。灵活性说每一个队列中有剩余资源。比如说任何一队列有剩余资源,它可以把这个资源借给其他需要资源的队列。
02:00
那当然他自己这个任务比较紧张的时候需要支援,可以把这个资源再抢回来。同样道理哈。仍然支持多用户。你看宋老师,苍老苍老师都可以对吧?都可以向这个集群队列提交志愿,这是相同点。那下面区别在哪儿呢?往下看。区别第一个不同点叫核心调度策略不同。我们容量到期还记得它这个资源怎么分配的。资源利用率最低的优先执行。对吧,也就说白了,谁的资占用资源少,我先把你这个小的先给他执行完了。执行完之后再执行大的啊,这是容量调速器的特点,那公平调速器的特点呢,就是绝对公平。让每一个用户尽可能的分配平等的这个资源。那他怎么分配呢?说选择对资源,资源缺额比比较大的。谁学的比较多,我就给谁。
03:00
优先分配好,那一会儿我们来看这个缺额,什么叫缺额?下一个说,每个队列可以单独设置资源分配方式。每一个队列都可以单独设置,它是按照哪种规则进行调度任务。这更灵活对吧,看一下说容量到器啊,它可以配置的这个单队列的资源啊,这个调度方式呢,是有F对吧,默认就是F嘛,还有个叫DRF。啥意思呢?它可以按照咱们默认这个调度器是分配的,是不是内存呢。说内存是我们的资源,哎,占20%,50%,30%,那如果还有CPU呢。对吧,有的任务是CPU密集型。那我们可以按照内存加CPU的方式进行配比,那后面我们再详细说它啊,先不着急,先有印象。那下面来看我们这个公平道器,它支持的是FIFA,比如说它也可以配成这个FIFA,每个队列是FIFA,那是不是相当于跟容量导器一样了,哎,那另一个呢,就是他自己的公平调度算法。
04:02
同时也支持这个DF。就是内存加CPU这种方式双重因素的一个配比。那这里面我们一个一个解决哈,先解决这个缺额的问题。把它打开,什么叫缺个?假如说这一个队列里面有四个任务,突然间又来了一个任务,没问题吧?哎,又跑了一个任务,跑了一个任务,正常情况下,我期望的是不是应该在总队列当中每一个任务公平享有队列资源,我是不是应该均分呢?对吧,这是我理想的情况,让每一个任务均分,这是我刚来,但是现实是什么样呢?现实我现在啊,正在运行四个任务,你突然间来了,你来了就。直接给你分配资源吗?你是不是得给我点时间的缓冲啊,我说不得把别人的这个资源抢出来一部分,然后给你啊。对吧,那在时间上就有一个时间差,那这个时间差就叫。去了。
05:00
看那我这个JOB151上来。我需要多少?我需要的是这些。但是我实际呢,我实际只有这些,那我缺多少,我是不是缺这些。对吧,这就是我的缺额。嗯,好,那么来看一下概念的定义,说公平道器设计的目标是在时间尺度上,所有作业获得公平的资源,比如说他期望的是这种。那某一时刻呢?一个作业应获取的资源和实际获取的资源的差额就是缺额。你说现在我实际获取的是这些?那我期望获取到哪?我期望获取到这儿。那这个地方就是缺个。那这个调度器呢,会优先为缺额。大的作业分配资源,比如谁缺的越多,那我就先给谁,你这15不来了吗?你缺的越多,我优先给你,把你的资源释放点,你的释放点,你的释放点释放完之后给他。哎,就这个事儿啊,这叫缺额。
06:04
好,往下看。那下具具体来看一下这三种调度策略哈,分别是FIFA调器,F调器啊,其实不用太多说啊,因为公平调器的每个队列分配策略啊,如果你设置成ffa的话,那就跟我们上面的容量一样,对吧?容量不就是底层,不就是FIFA吗?而且是多队列。那那当然这种方式我们一般不会配置,我们会选择这个叫。公平调集。那公平盗窃底层采用的是最大最小啊公平算法这种方式,默认情况下,每个队列内部采用该方式分配资源,意味着每一个队列中有两个应用程序同时运行的时候,那应用程序会得到1/2的资源。你个任务。对吧,这个对里面有两个任务,那它里面一人占50%。哎,这就是均分,那如果有三个任务同时运行,那怎么办?金身。还是分三份。
07:01
就这样运行,尽可能的让每一个任务都公平享有队列的资源。OK,那往下看,看一下细节。具体队列,具体资源分配流程和这个容量到期一致,比如说这个资源分配的时候,它也是T梯示性的这个分配,先分配队列,然后分配作业,再选择容器,哎,这样的一个分配啊,那上面这三步呢,都要按照公平策略的资源分配调度规则来走。那首先来看第一个概念。叫实际最小资源份额。那它等于什么呢?等于你资源的需求量,还有配置的最小资源数目,我们会被每一个队列配置一个最小资源呢?而而且呢,我这里面有一个资源需求量。比如说我要跑这个任务,他最低需要多少。这样,那假如说。我配置的这个最小资源是二。没问题吧?那我实际资源需求呢,需求是四。哎,这个二呢是相当于是最小满足它的一个要求啊,四呢是我一共实际实际需要的,哎,4G内存。
08:09
那接下来。看他是否饥饿,那怎么看呢?我经过这个公式一算,我是不是就获取了实际最小资源份额呀,那那实际费最小金额份额不就二吗。对吧,哎,他俩选个最小的,哎,只要能满足你先能跑着,哎,那就是他。二来了,那我现在资源的使用量,比如说我当前这一时刻,我实际用了多少时间?对吧,你说你最小给我分配二,但是呢,实际我现在只有一。那时候我就很饿呀。对吧,哎,实际我就很饿,那很饿怎么办呢?来继续。那你你饿,那可能其他任务也饿呀。那我给谁分配任务呢?那来看说有一个资源使用量,你是一吧,对吧,那还有我出一趟。啥意思?我现在的资源使用量是一。
09:03
然后ma克X mini,那max mini是不是二啊,然后是一啊,哎,它俩取最大值,那是不是就二。那我除以它,相当于我现在实际实际用了一个内存。但是呢,你应该给我的最小内存是二,那相当于我是不是缺了50%。哎,这就是我资源的一个分配比,说我缺了50%啊。那别人,比如说另另来一个人,说别人的资源使用量是0.3,然后除以一个二。那哥哎,那他缺的是不是还没有我比我这个缺的还多呀,那我是不是得优先给他分配呀。哎,是一样的道理哈,所以说看谁缺的多,我就优先给谁分配,那下面说资源使用权重比,那这里面还可以配置每个任务的权重。那你说这个权重。他的这个比如说有十份,哎,那么这个任务比他分配八,他分配二,那么这里面分配的资源是不是就多一些啊,哎,后面我们看这个权重啊。
10:02
往下看,刚才呢,这套流程是这样的哈,我们上来就要先计算对应的这四个值,把它算出来,算出来之后开始判断我当前这一时刻是否饥饿。对吧,哎,是否饥饿,如果饥饿的话,谁饥饿那我就优先执行谁。是吧,那你看这个既然是一,那我实际大小呢,应该满足我二,我才能让它最小的运行。那我现在很明显我饥饿,那饥饿就直接运行去了。那假如说都几个。你这个任务是1:2,那我再来一个任务,说是嗯,二三。对吧,2:3,那我优先执行谁呢?都及饿的情况下,那就看资源分配比小者优先。那你看一个是一除以二,一个呢是嗯,二除以三谁大呀。是不是他大呀,那他他大的话。那我是不是优先执行这个小的。优先级1/2的呗,哎,就按照这个,那如果它俩相等呢,如果说都是2/3呢。
11:04
那我就按照这个任务提交的顺序去执行。这是这样一个判断,那再往下来,下面如果都不及格。你说啊,我都不需要资源对吧,那我在实际之间,比如说使用都是二啊,你这最小不是二吗?我都满足。那这时候怎么办?那这时候呢,就是资源使用权限啊,权值的一个比较了,看谁的权重多。哎,你看,比如说我这里面。它是二,它是二,现在两个任务假如说都是二了。没问题对吧,哎,那其他都一样,那权重假如说第一个任务的权重是六,第二个任务的权重是四,那我就先进谁呀,哎,资源使用权重比较小者优先。那谁小,我让他先执行,嗯,这意思啊,好,那相同的话就按照提交顺序执行,那谁提前提交,那就谁来找。这是公平到期的一个资源分配。
12:01
那下面我们再往下看。下边来一个阿里实操。这个这是队列对吧,资源的一个配置,这张图应该不陌生,那现在首先分配一下队列的这个资源。QQBQC,那它怎么分呢?我总资源是不是100呀?没问题,我有三个队列,那我需要呢,对资源进行分配,说QA要20 QB50 QC30。他首先这样绝对公平,我上来100除以三。每个人是不是都是33.3呢啊,QA给他分,给他分,给他分都分,这些分完之后你会发现啊,QA多出来13.3。那QB呢,少了这些QC多出这些,这样吗?那好,那把多出来的加在一起。然后准备给嫂子分。那好,那你就把这个多余的这个加在一起,然后给他分。那一给他分的话,那剩下的是不就都给他了,给他加在一起是不是就50啊,哎,是这么来的哈,所以说这是五十二十二十啊,这个30。
13:06
那下面再来。这是队列层面的一个分配,那下面看一下作业。注意注意分两种,一个是加权,一个是不加权啊,一是加权重和不加权重,首先来看一下不加权重。啊,有一条队列啊,总资源是12个啊12个资源那有四个兆吧。在运行,那分别对资源的需求,比如说JOB1需要一个资源,JOB2需要两个,照三需要六个,照四需要五个,那总共需要多少呢?一加二三加六,这是九个,九个加六啊加加五是不是14个。但是我实际只有12个。那我怎么分呢?记住,绝对公平上来,我这是12,我除以四个job,所以是吧,哎,好,每个人分三个。分三个,分三个之后啊,你你会发现啊,这个一和二。都多了,那这个三和四呢,少了。
14:03
知道吧,那把多的加在一起。我是不是剩余三呢?这俩加来起剩三三,我要分给几个人,分给两个人,那好,那还是绝对公平,我除以二,那每个人应该分到1.5,好,那我给你分1.5,给他分1.5。分完1.5之后,那你原来上一次是不是已经分了三了,那好,那三加1.5,那是不是4.5,那他这个上一个呢,是也是三三加1.5是4.5。那实际的结果就是JOB3分了4.5 job4分了4.5。那好,JOB3需要的是,六四需要的是。五是不是都不够啊,哎,那这就是这么分。有之言。他就开始分。行,那下面来看一下加权怎么分。假如说有个队列呢,总资源是16,仍然是有四个job,那JOB1需要四个资源,JOB2需要两个,JOB3需要十个,JOB4需要四个。我总共是16个,但是这是四,二,这是十,十六十六加四,我是不是需要20个。
15:06
满足不了要求对吧,那下面看每个job呢是有权重的。比如说赵不一要求占总资源的五,它占总资源的八,占资源的一,占总资源的二,那加在一起是多少?加在一起是16。那下面儿只要有全中了。那怎么分,就拿你的总资源去除以对应的这个权重的和,跟他就没关系了啊,就先不要看它了。就除以权重,那我加在一起之后,得出的权重是每一个人分一啊好,那我就开始分,分你总资源。得多少呢?5812。那你这一分完之后。他要跟你需要的资源进行一个对比。那你JOB1呢,你看多出了一,JOB2呢,这里面分了八,但是呢,我实际只需二,我是不是多出了六啊?嗯,那JOB3呢,实际是十,但是我只分了一,少了九,那赵VA4呢,实际需要四,我分了二,那是不是少二啊?
16:04
OK,那我把多的再加在一起。多的加在一起多少是不是七呀?记住我分母始终除以的是对应的权重。那权重我现在是不是三和四。他俩没有分满呢,那把它俩的权重加在一起,是不是加在一起是三。对吧,七除以三好,他七除以三。那我这个JOB3它占你七除以三的多少分,是不是只占一份,那七数是是不是2.33。那好,我照吧,四占你这个七除以三的多少分呢?我是不是占两分,那我是不是乘以个二,那结果就是4.66。啊,把你这个七分成了2.33和4.66。好。那么给这个赵三分了,2.33之后。他还缺多少呢,你看啊,我之前是造把三分了一个一对吧,哎,分了一个一,然后这块呢,又分了一个2.33,我实际需要的是一个十,那我实减去2.33,再减去一,就等于6.67。
17:06
OK,那再往下看,那看我这个JOB4。赵博士呢,我上一次分了二,这一次呢,我又分了4.66是吧,那我加在一起是6.66,我实际只需要多少,只需要二。那我只求二,我现在多出来。嗯。啊,这个啊,JOB4啊,只需要四,那JOB4的话,那我只需要这个四,那我6.66减去四,我是不是多了2.66啊,那多点这个2.66,下一次再分的时候,这2.66给谁呢?是不是就给你上面这个JOB3没完成呢,那你分它呗。就完事。哎,就是这样一个效果哈,那你看我除以这个权重是吧,这是权重啊除以它。就行了啊,这是带权重的哈啊,自己多捋几遍就OK了,行,这是资源的一个分配,那再往下看。下面来看一下这个DF这个策略,它啥意思呢?是这样的说呀,我们之前所说的资源都是单一标准,我们指的就是内存。
18:06
哎,你这个资源按照内存怎么分,但是呢,有些情况下我们需要考虑CPU和内存。这种情况进行参考,比如说你看下面这个案例哈。说集群当中啊,有一个共有100个CPU 10T内存。好,应用A,也就说第一个job吧,它需要两个CPU。然后呢,300G的内存。没问题吧?第二个兆吧,兆B,它需要的是六个CPU 100G内存。什么意思?他需要的CPU少,他需要的CPU多,他需要的这个内存多,他需要的内存少,那你算完之后,A需要这么多百分比,2%的CPU 3%的内存,它需要6%的CPU 1%的内存。那这意味着什么呀?A是内存主导的,也就是说它需要的内存占比比较高,那B呢?B是CPU主导的。那针对这种情况下,那你这个策略。
19:02
那我就得进行不同的配置,按照CPU,哎,你CPU多,那你的权重可以多一些啊,那你这个需要内存多,那我给你内存分配的多一些。还是这种方式进行一个分配,也就是说这个考虑的因素啊更多一些,那也更贴近相应的实际。好,这就是这个公平造器相关的一些特点和算法。
我来说两句