00:00
呃,上午前咱们就提过一句,就是说我们到了公司之后啊,咱们这个,呃,公司里边这个集群呢,我们的资源调度器啊,就是有有些情况下,咱们可能用的是这个容量调度器,也有用公平调度器的啊,用哪个的都有啊,但是甭管咱们用哪一种,我们都是有一个队列的概念的,就是容量调度器或者是公平调度器,我们都是有一个队列的概念的啊,都是多个队列,那我们去提交任务的时候呢,是不是都得指定一个队列呀,咱们都得指定一个队列啊,那所以说在这呢,咱们得知道怎么去给他呃配置多队列,以及在多队列的情况下,咱们怎么去提交任务,我得知道我这个任务怎么提交到我想去提交的那个队列里边。呃,因为到了公司之后,咱们如果这个调度器分了队列,那你的任务一般情况下是不能随意提交的,你不能说你想提交到哪个队列就提交哪个队列,是有相关的这个权限管理的啊,所以说这个大家得学会怎么去往不同的队列提交任务啊,啊所以说在这儿呢,我们就需要模拟一下这个生产环境,咱们也配多个队列,然后后续咱们提交任务的时候呢,也要指明队列啊啊,那先不说怎么提交啊,咱们得先说我们在企业当中一般情况下是怎么去配置这个多队列的啊来咱们看一下,呃,游戏公司呢,它可能会按照这个计算引擎去提交这个队列。
01:21
按照计算引擎啊,那s Spark引擎,S Spark任务啊,S Spark任务,S Spark任务全都提交到s Spark队列,那如果是link任务呢,全部提到flink任务的队列啊,那如果是当这写的是have对吧,这是它意思其实是MR啊,如果是MR的任务呢,我提交到MR队列啊有这么去划分的啊这么划分的这是一种或者说呢,还有按其他这个呃角度去划分的什么角度呢?看一下这个这个呢,是按照咱们的这个业务去来划分队列啊这个下单这这这一套业务的这个任务呢,不管是什么引擎,哎,我都提交到下单这个队列,那呃点赞的这个所有的这个计算呢,我全部提交到计算的这个,诶队列当中啊是这样的啊嗯,那当然这个划分队列呢,呃,咱们公司一般情况下,你去的时候都是划分好了的啊,你就咱们主要学会怎么提交就行啊来那接下来呢,咱们来说一下,就是咱们为什么要去划分多个队列啊,多队列有什么好处啊来往下看一下。
02:21
啊,首先第一点呢,啊看这儿啊,啊说什么假如公司来了一个菜鸟是吧,然后什么写了一个循环,呃,什么递归死循环啊,其实呃,就什么意思啊这块想起来了一个这个新人对吧,他可能对咱们整个集群不是那么的熟悉啊,然后呢,我写了一个任务,这个任务呢,需要请求大量的资源啊,那写了一个请求大量这个资源的一个任务之后呢,那提交到集群当中,那这个会导致什么呀,如果说不做任何的限制啊,假如说只有一个队列啊,那这个任务呢,提交到这个队列里边来了,他们需要来耗费大量的这个资源,因为比如说我这个读取的数据量太大了啊,我把一年的数据全查出来的,去进行一个统一的什么joinone呢,去分组啥的,对吧,啊,那需要大量的资源,那这样一来呢,会导致什么呀,会导致这一个人是不是就把咱们这个集群当中的大部分资源是不是就都占了呀,对不对,他占了之后,我其他任务是不是有可能会受影响。
03:15
啊是这样的啊,啊是这样的,那所以说呢,咱们针对于这样的一个情况,我们其实可以怎么去做呀,啊,咱们这个做的方式很多啊,首先第一种方式,咱们可以分多个队列。对不对,哎,可以分多个队列,那咱们线上的任务我统一提交到一个指定的队列,这个呢,必须得是你经过测试没有任何问题的任务,我才能上线,我提交到这个队列啊,然后呢,我那个其他的这个测试的任务啊,诶,我放到一个专门用来做测试的一个队列里啊,那这俩资这俩队列之间这个资源是不是可以大致上保证他们哎不受互相不受影响啊,对不对,那这样一来,即便你写的这个哎任务不行,你写的这个任务有问题啊,你在测试阶段你就能发现他的问题,是不是他也不会影响到我们其他这个线上的任务啊,啊这是一种解决方案,或者说其实你要真就是只是为了解决咱们刚才提到个问题,那其实还有其他的解决途径,那怎么样啊,哎,我们可以,诶任意一个队列当中不可以去配置啊,配置什么配置,比如说诶一个用户他所能够使用的资源上限,我们是可以单独配置的啊,每个用户因为你这个任务提交上来之后,是不是都有你这个用户的名字啊,对吧,每个用户比如说。
04:28
我最多只能让他使用我这个队列当中1%的资源,最多1%或者最多2%,对不对,那这样一来其实也能够避免类似这样的问题啊,是这样的啊好,那接下来再往下看,下边还有什么什么,我们可以使用队列统一管理任务优先级,保证重要的任务优先完成啊这个咱们怎么理解啊,来大家来认真听一下啊。其实还是刚才咱们提到那个问题啊,比如说我现在队列里边呢,我我这个整个集群啊,我假如说没有分测试集群和生产集群,咱们公司比较穷,对吧,只有一套集群啊,这一套集群呢,那我的生产任务以及我的测试任务都在这一个集群上,对不对?那对于咱们从这个优先级考虑,优先级的角度去考虑啊,那你说是线上啊,咱们这个生产任务它的优先级高,还是咱们测试的优先级高啊,那肯定是咱们线上这个生产的,呃,这个优先级高对吧?那这时候我就可以怎么做呢?我可以直接啊怎么做呀,直接对这两个队列设置一个啊优先级啊,比如说生产队列,那我的优先级啊要高一些,那这个,呃,测试队列呢,优先级第一级,那这样一来能保证什么啊,所有提交到生产队列的这个任务呢,我都能够优先完成啊,那测试任务呢,那相当于就是呃,没有那么优先了啊,是这样的一个111个作用啊,这样一个作用,呃,然后再有一个呢。
05:52
其实这个优先级的问题,我们也可以不使用队列统一的去,哎,这个设置我可以怎么去做呢?我可以通个任务去配置也行啊,我们每个任务提交上去之后呢,都可以配置一个优先级,只不过呢,我们怎么样,我们使用这个队列啊,去统一管理的话,它比较方便了,对不对,我只要提交这个队列,那我的优先级就是这个队列的优先级,那只要提交它,那它的优先级就是它的优先级,是这样的一个意思啊。
06:19
啊,就是无论如何吧,就是在企业当中,我们一般情况下,咱们这个调度器那肯定都是有多个队列的啊,这是我们大家需要知道的啊,啊那完了之后呢,接下来我们就来演示一下,就是如何配置多队列,以及在我们提交任务的时候呢,如何指定这个多队列,如何指定队列啊那接下来咱们先配一个多队列,那要配置多队列的话,那咱们配的是不是还是容量调度器啊,那所以说要修改的配置文件呢,是不是肯定是那个capacity schedule SML文件,对吧?那接下来咱们找到它啊,找到它之后我们需要去做以下这个配置,那首先啊,我们需要修改以下属性,注意这是修改啊,这是修改,然后呢,同时为新的队列增加以下属性啊,就是有修改的,有增加的,那咱们现在呢,先把需要修改的这两条给它改了啊来我们进到。
07:10
PD上是不是就在这里,我们打开那个capacity c schedule啊,然后咱们来了开头啊,咱们从上往下走,看看我们要修改的这个属性都有哪几个啊来我们看文档。先看第一个啊,第一个咱们把它粘出来吧,可以搜一下啊复制。然后呢,来到这儿搜索一下回收找到了,那这个属性,我们来看它是什么意思啊。其实看首页名咱们大致就能猜出来啥意思,什么意思?雅安点schedule.capacity.root.q什么意思?这是不是咱们那个雅安的容量调度器的?Root节点下边的队列呀,对不对,那它默认有谁default这个是不是正好跟我们在8088页面上看到的是一样的呀,还度啊,然后103,然后80088。
08:02
回说咱们点这,你看目前是不是就是这种root下边只有一个default对吧?那我们现在呢,假如说我想配置多个队列,那这块应该怎么改?所应该在这个default下边,后边呢,我们再给它加上一个其他队列就行了,摁下I来个逗号,注意逗号分格,比如说我加一个have队列,那这块呢,你就可以,哎,有俩队列啊,就是这么加啊,那这个改完之后呢,咱们再往下翻看这个位置。看这个属性啊,看名字还是雅安,然后点点点这个capacity,然后呢,root.default.capacity这什么意思,这不相当是那个default队列的容量啊,它是多少啊。因为只有一个队列,所以它是不是占了100%呀,那咱们现在有俩队列的,所以说我需要怎么做呀,把这个是不是得调小一点呀,那这样一来的话,他俩每人比如说50%,诶那一人一半啊,那三个呢,你可能会比如说30%,30%,40%,哎,可以这么去分啊啊那这是咱们需要修改的两个属性就改完了,这修改的啊,那接下来剩下是不是就是新增的了呀,那咱们把这一大串呢,全部粘出来啊,然后放在这里边CTRLC,呃,往这随便找个地方吧,摁一下I啊,然后把它粘过来,粘过来之后呢,我们把这个粘过来的属性呢,咱们,哎竹竿的看一下啊。
09:22
哎,往上翻。从哪开始,从从这个位置开始,是我们新增的对吧?呃,然后这个汉字呢,大家可以直接保留,注意看我这个汉字我放在哪了,我是不是放在这个description这个节点里边了呀,这个就是描述信息,你这个放什么都可以啊啊,那接下来咱们继续往下进行啊,就往下进行来先看这个参数。它是名字叫做雅安schedule.capacity root.have哎,这是不是刚才咱们加那个have队列的容量啊,50%啊,这个没问题啊,往下走往下走下边。看这。这叫雅安,哎,Scheduler,然后呢,哎,Capacity root.have.user limit factor,哎,这个什么意思,这是不是就是。
10:10
哎,用户使用资源的一个上限呀,对不对,什么意思啊,这样呢,指的就是啊,一个用户最多能够获取该队列资源容量的比例。啊是这个它的取值呢,是零到一,这注意啊,这是零到一,不是百分之多少了啊零到一,那咱们这设乘一是不是意思就是我们每个用户都能使用这个队列的100%的资源呀,对不对,那假如说你要怕那种就是呃,会影响到其他任务,对吧?我可以对某个用户或者是每个用户去设置一下它使用资源的上限,那比如说设成1%,这样你就可以怎么写0.01是不是就行啊,就这么去设置这个每个用户的上限啊,那接下来往下走,那看这个。这个参数我们看一下,这个叫雅安CA,然后呢capacity root,然后have。
11:01
Maxim capacity,哎,这什么意思,这好像跟刚才咱们配了一个参数比较像,对吧,跟刚才配了一个这个参数。呃,它们俩的区别只有一个,什么呀?只有一个最大是不是?这是have队列的容量,这是have队列的最大容量。大家思考一下,什么叫做容量和最大容量,这啥意思?来没错,是这个意思啊,咱们容量调度机也好,公平调度机也好啊,我们这个队列啊,首先大家得明确啊,这个队列是什么样的啊,我们这个队列确实是不是咱们会给每一个队列去划分一定的资源呀,对不对,但是这个它并不是静态的。啊,它是一个什么样的呢?是一个动态的弹性的分配,什么意思,假如说我在这儿呢,配了20%,这个派的30%,这个50%是不是已经100%了呀,对不对,但是呢,并不是说我这个队列。啊,这20%你别人就不能动啊,你这30%别人就不能动,并不是静态的,这是一个动态的弹性的分配,那什么意思啊,比如说目前情况下,那这个队列没有任务,这个队列呢也没有任务啊,那这个队列我现在任务很多啊,而且呢,资源已经不够了,这个队列资源已经占满了,对吧,那这时候我就可以怎么做呀。
12:18
啊对,我就可以借其他那个空闲资源,呃,这个空闲那个队列的资源,因为他那里边没有任务嘛,我就可以借。然后呢,我最多我能接到多少呢?啊,是不是由这个最大的容量来决定的了呀,对不对,那这个就是最大容量80%嘛,就这个意思啊,就这意思啊,那这块呢,其实在我们这个哪也能看到啊,在咱们这个页面上也能看到,你看一下啊。这有一个虚线框,宣管是什么?是不是capacity,是那个容量啊,对不对啊,那还有什么,还有一个max capacity,这就是啥呀,是不是最大容量啊,对不对,那当然现在咱们这儿只有一个队列,你看啊,你就看这你看能不能看明白啊,这里边是不是有一个虚线框。
13:04
然后最外层是不是还有一个那个实线框。看到没有,这就说明它的最大容量和它的这个容量是什么样的呀,是相同的,那如果如果不相同这块呢,你这个比如说我容量是到这儿,那最大容量就到这儿,你其实可以看出来的啊,一会儿咱们配完之后呢,咱们再看就是这个,呃,图例呢,咱们大家看一看这个东西得能看这能看明白啊行,那这个一会儿再看吧,啊往下走,这是最大容量这个概念咱们要搞清楚啊,然后再往下。啊,这。这个东西是什么啊?这个相当于是一个开关啊,它叫这个root.have.state是不是这个相当于这个队列的一个状态呀,对吧,它其实相当于一个开关啊,那假如说我们把这个队列配上了,配上了,但是如果这个开关你并没有开启,如果不是running状态,那你这个队列也是相当于没用的,你不能往里边提交任务。啊,那假如说我现在呢,配完之后,我这个队列又不想用了,你要不想用了的话,那正常来说你需要怎么做呀。
14:02
如果没有这开关啊,你要不想用了,对你得怎么是不是得改这个配配置文件,把你修改的以及增加的参数是不是全都改回去,然后全都删掉啊对不对,那太麻烦了,这你就不想用了,你也不用改那么多了,直接把它关了就行啊呃,这个可以改成那个stopping状态,应该是stop状态啊,可以关啊行,那这就相当一个开关,咱们要想用必须保证它是如软状态啊,这个得注意,然后呢,咱们再往下看,那这块呢,其实相当于就是什么呀,就是啊来我们把它看一下啊,咱们主要看这看哪是不是ACACL啊对吧,Acl这个什么意思。应该经常看到吧?CL什么意思?L,不就是access control list吗?对不对,什么意思,就是访问,呃,那个访问权限控制呗,对不对,访问权限控制那什么意思啊,在这儿我们是什么,是队列的访问权限控制对不对。队列的访间,什么叫队列的访问权限控制啊,咱们队列干什么用的,提交任务的呀,对不对,那所以说你看这这叫做a c submit application applications,其实这个参数就是去配置谁或者是哪个用户可以往我这个have队列里边提交任务啊,你可以做这个权限控制了啊,比如说这个队列啊,新来的我不让他提交,哎,那你是不是就可以把它排除在这个列表之外呀,是这样的啊,那这边咱们写的是星,写星的话就是所有人都可以提交啊,这个注意,然后这是a CL submit applications,那下边呢,咱们还有一个跟他很像的叫做AC啊,Administrator q什么意思啊,这是。
15:41
这个是不是用来控制谁可以提交任务的呀?这个是干什么的?对,谁可以管理这个队列啊,那提交就只能是控制谁能提交,那管理包括什么呀?包括哎提交和取消任务啊,就是你你假如说我这个看这个队列当中,这个任务占的太多了啊,我我想干什么呀,我想把里边的任务kill掉几个,那如果说你只在这里边有权限,你能kill吗?Kill不了,你只能提交,那谁能谁能那个kill呢?是不是这里边的人可以kill他呀,是这样的啊,所以说下边这个权限要大一些啊,把这个搞清楚行,那这个就是咱们加的这一些呃,几个参数啊,那当然下边的还有一些其他的参数啊,比如说去设置这个任务的优先级啊,然后呢,这个呃,任务的最大的什么生命时长啊,就比如说超过这个呃,多长时间之后我就自动超时给你干掉啊,也可以这样去配,或者说你也可以设成负一,设成负一的话呢,就是呃,没有超时这一说啊,就是我一直等着什么那玩意儿,等到资源什么时候等到资源我就什么时候算完,对不对,等不到就一直等啊,也可以这么去配啊,等等等等是这样的啊,那下边的还有其他一些算数,咱们就不再一个一个说了啊,这个比较浪费时间。
16:55
啊,咱们这里边儿都有中文注释,大家看一看就行啊好,那咱们现在这个相当于这个队列,是不是咱们就加上了呀,那加上之后我们需要做的事呢,就是分发这个文件,然后重启海度集群。
17:07
哎,再分发一次啊,XSYC可帕里schedule,然后回车。然后呢,Stop DFS这边呢,Stop雅N。啊,一点回车啊,稍微再等一下啊同学们好,那多队列咱们配完之后,配完之后呢,咱们得考虑一个问题啊,什么问题,就是我们提交多提交任务的时候,咱们怎么指明那个队列对吧?啊咱们怎么指明来,我现在呢,先启动海子波集群啊那了。DS推车这边道牙。好,那这两个任务呢,这两个进程我们稍微等会儿啊。嗯。先等他这个起来吧。起来之后呢,我们可以先去看一下咱这个队列有没有配置成功啊,怎么看在页面是不是能看到咱们打开8088页面啊。
18:05
来打开8088页面之后呢,我们往这儿看。你看。这个位置是不是就已经在root节点下边出现了一个have队列了呀,那就已经出现了,那出现之后呢,咱们来看一看,哎,后边这个队列这个图咱们能不能看懂啊,来你看哎这个其实这回就比较明显了啊,你看这个default队列。这个A队列这一块,这指的是什么这一条。是它的最大容量,它最大容量是多少?100%,100%,那咱们这个have队列呢,最大容量是多少啊到这儿,那咱们当时配的是多少,咱们hi队大队列呢,我们配的应该是80%对吧?呃,在哪看这里边有吧?呃,在这儿是不是咱配的是80%啊,那所以这儿呢,你应该是能看懂的,然后中间这个虚线框呢,虚线框是不是你给它配那个容量啊,容量它是多少?50%,50%,这不是正好在这个root队列的一半的这个位置啊啊所以这个东西咱们应该看懂,然后上面还有不同的颜色啊颜色这呢有一个绿色叫做use的,然后还有一个叫是橙色的,叫做什么use的over capacity。
19:09
啊,那假如说我有一个任务,我提交到还有队列里边了,那假如说我使用了这么多的资源。哎,那你说那这块这个颜色应该什么样的呀。什么叫做over可拍体啊?哪是可拍,这是不可拍的,那这部分应该是什么颜色?是不是就是橙色的了呀啊,那前面这个应该就是绿色的呗,啊就这意思你能看懂吧?啊就这个意思啊,这些东西大家自己都看一看啊,行,就是这些,那这个队列呢,咱们在这是已经拍完了啊视频录一下。
我来说两句