00:00
好,接下来我们来看一下容量调度器,那它也是默认的调度器,对吧?那在生长环境下呢,肯定是大量使用的,呃,容量调度器啊,它是雅虎开发的一个多用户调度器,什么叫多用户啊,比如说有多个注册的用户可以向这个集云上提交任务,那比如说一个爱德购谷账号可以向集群提交任务。那再来一个root账号,也可以向他提交任务。Tom对吧,嗯,李雷韩梅梅,哎,都可以往这里面提交对应的任务啊,这叫多用户。那我们下面来看一下它具体的一个特点啊。首先来看一下,这里面有三个队列,分别是队列A,队列B,队列C,哎,这么三个队列,那我们这个队列资源怎么分配呢?队列A啊,我占总资源的20%,队列B呢,占总资源的50%,队列C100资源的30%。那队列C当中他有两个用户,一个呢是宋宋老师,另一个是苍老师。
01:06
宋宋老师对这个资源的使用占50%,苍老师呢,资源占50%,可以这样去分。OK,这是初步的一个介绍,那下面往下走。说呀,它是一个多队列。能看出来是不是三个队列,哎,可以配置多队列,再往下看说每个队列可配置一定的资源量。每个队列采用FIFA调器,其实底层它是一个一个的调度器。那Fi掉期的特点就是按照时间先进先出,接下来的那我就先给谁执行,是这样吗?那这块要注意看一下,看一下它。啥意思呢?如果说我总共集群有十个G的资源,我第一个任务只需要2G。那我还剩下8G,那我这8G怎么办?对不对,那我是等这个job吧,一完成之后,然后我再执行下一个吗?不是对吧,你JOB1的资源我已经满足你了,我是不是还剩八个G呢?那剩八个G就给下一个任务,那如果下一个任务它是呃六个G,那我是不还剩两个G,那还剩两个G他也能够暂时启动。
02:17
是这样一个特点哈,就是优先满足先进来的任务的资源,那就行了,那我在一个队列当中也可以启动多个任务。好,这是第一个特点,多队列。这是资源的一个配比,下面说容量的一个保证。啥意思呢?说管理员啊,可以为每一个队列设置资源的一个最低保证和资源的一个上限。假如说我这是资源的20%,对吧,这资源的50%。如果我现在总资源只有60%。那会发生什么情况呢?比如说我现在能只能提供总资源的60%。
03:00
那有同学想了,那你就把这个60%都给这50。啊,还是说给他20,那你你还剩下这个40,那40再给他怎么分呢。它这里面有一个最低资源的一个保障,你得保证每一个队列都得分到一部分资源。比准60%对吧,那假如说它的最低点保障5%,那它的最低点保障啊,10%啊,它的最低点保障5%,那你得让每一个队列都得有任务能够执行啊,它是这个含义哈,所以说有个最低资源保障。那同时呢,也有一个资源使用的上限。那默认情况下,这不就是你志愿上限吗?你不能超过你自己的总队列的20%。对吧,哎,这是默认情况下啊,后面是能改,所以可以抢啊,但是抢的话,即使是抢那别个队列也拥有他自己队列资源的最高优先级。嗯,那下面的事哈,那你先认为说资源上限的就是这个总队列的容量,OK,往下走。下面说灵活性,说一个队列中的资源有剩余,假如说它的资源有剩余。
04:06
我只跑了一个任务,我我给我分了50%的资源,我很轻松对吧,那这时候怎么办呢?可以暂时共享给其他队列。啊,假如说我这一个任务用了10%,我还剩40%的资源,那这40%可以被别人借走。哎,就是我刚才说的说这个资源上限它是,呃,说是总队列20%,但是如果能借到资源的话,那这个总队列的资源还能往上拔。是这个意思,好,而一旦队列有,一旦该队列有新的应用程序提交,则其他队列借调的资源会归还给该队列,什么意思?你说现在啊,我这里这个这个任务运行10%对吧,还剩40%被借走了,借他20%,借他20%。那我这个地方我又提交了一个任务,说执行后面又来了四个任务。我自己的资源都不够了,怎么办?第一,优先级抢回来。因为我是有绝对的这个控控制权的。
05:01
哎,他的优先级最高对吧?哎,这个要知道一下啊,可以借资源,借完资源如果有新任务,那别人必须优先级的退回来哈。下一个呢,叫多租户啊,多租户啥意思?支持多用户共享集群和多用程序的共时同时运行,看这能看出来了,在这个队列C当中,他有宋宋老师的提交的任务,也有苍老师提交的任务啊,也说可以有多个客户提交任务。那还有那这里面啊,这个宋老师这个水平有点差,对不对,哎,执行一个任务呢,呃,可能会非常非常慢。那这时候要注意了,我们这里面为了防止一个客户独占队列中的资源,怎么办呢?诶,该调度器会对每一个用户提交的作业资源总量进行一个限制。哎,我不知道,比如说这个这个队列啊,一共有30G,那我限制你宋老师最多只能使用十个G,假如说啊,或者15G吧,啊,15G最多只能使用15G。
06:00
你超过他,他就不给你分配资源了,那你就得等待。那即使这个苍老师这边啊,这个这个这个苍老师这边他有15G闲着呢,那你也不能用。那我给你限制10万,你最多只能用15G。啊,就防止啊,这个菜鸟去公司当中提交了一个递归死循环任务,把你整个集群这个资源全部占走啊,那这种是比较风险的啊,所以说这块呢,是有一个防止单用户提交资源的一个上限,防止误操作是这么一个功能哈,好,那稍微总结一下,支持多队列对吧,这是多队列。来保证容量的一个最低保障,每一个队列里面保证都有一定的资源,同时呢,还有对应的资源上限。灵活性。啥意思呢?哎,如果这个队队列有空闲的资源可以分享给别人,别人来借,那如果我这里面需要资源的时候,我再给他要回来。哎,这是队列的借调,当然这个功能你可以把它关闭掉,也可以再往下呢,是多租户,那一个队列当中可以有多个客户向集群里面提交任务。
07:04
同时我还可以限制单用户他资源占用的上限,防止呢误操作,把整个集群全部资源耗光。好,这是容量调器的一个特点,那下面来看一下容量调器的一个算法。你说具体他怎么分配的。看看啊,这是root跟目录,它下面呢,有三个队列,有三个队列。问题吧,啊,队列C当中有两个客户,一个宋宋,一个宋老师。哎,那在这个QA下面有作业A作业B。赠送常老师下面作业三,作业四。在作业一当中有对应的开启了容器。那我资源怎么分?对吧,首先解决第一层的一个分配。从入用户开始使用,叫深度优先算法,优先选择资源占用率最低的,你说谁消耗的资源越少,我优先给谁提供。
08:00
那你看吧,一个队列A20%,队列B50%,队列C30%,我优先执行谁?是不是对这A呀,它的资源占资源占这个占比率最小啊,那我就优先给他。嗯,好,那给他之后,下面那到了作业这一集了。哎,作业这一节,他这个队列A下面有两个作业,一个作业一,作业二,那我先执行谁呢。那这里面可以考虑优先级,如果我设置了优先级,比如说队列一,诶,那他的优先级最高,那我先他。哎,可以,那如果没有设置优先级,按照这个这俩作业提交的顺序,谁先提交我优先执行谁。这没问题吧,哎,再往下。再一个呢,是容量啊,容器的一个资源分配,我这个作业当中啊,我一下子有三个容器,有map task reduce reduce task,对吧?嗯,这么几个任务,那我先给哪一个容器分配任务呢?尤其是这种并列关系。
09:00
对吧?啊,首先看按容器的优先级分配资源,你可以设置容器的优先级,如果没有设置优先级,那我怎么办?按照数据的本地性原则。我们之前讲A都说过,哎,看啊,他优先选择任务和数据在同一节点。对吧,你任务在这个节点上,数据也在这节点上,那我这个节点距离最近呢,对吧?哎,那我就放在这儿啊,可以启动它,那个呢是数据和任务在同一机架上,那节点距离稍微远一点,但还能接受。哎,那最后一个呢,就是任务和数据不在同一节点,也不在同一计价,这么三条原则,其实就是节点距离最近。这是资源的一个分配啊,好,那再稍微总结总结一下队列这个这一层次的分配,就是谁占用资源最低,那我就给谁优先分配,其实这个的原理就是想让最小的任务优先,先让他执行完,执行完之后是不是就腾出资源这个重点突击这个资源这个占用资源比较大的这个队列吗?
10:04
是这意思吧?哎,先让你小的任务先快速执行吧。那下一步呢,就是这个作业。啊,那这里面有优先级和提交时间。再来容器呢,优先级加上本地原则。啊,这就是容量代器相关的这个啊,原理和它的分配算法。
我来说两句