00:00
好,刚才我们看完了一个内存的配置,可能有的人有疑问呢,咱们是不是只讲了一个task manager的一个内存模型啊?那咱们的脚本manager要不要管呢啊,一般不用。一般manager咱们就保持默认就行了,如果不够你再去加一点点就行,因为manager。他不处理数据,也不存数据对吧。所以咱们不用去关心他,一般来讲好了,接下来咱们聊一聊,一个合理利用CPU资源。那为什么咱们要将CPU资源并行度拆开来讲呢?啊,这是因为啊有很多。呃,很多人也问过,为什么它并行度调整,咱们容器的一个呃v call核心数没有跟着调整。因为咱们主要是基于雅安部署的,对吧,刚才的任务还没大家来观察一个现象。来往后退。啊,这个嘛。
01:01
大家注意观察一下,当前呢,就是刚才提交的应用,那么大家可以看看目前使用了几个容器啊。四个容器吧。几个CPU核心数啊,四个吧,一共才四个。也就是说它是不是一个容器用一个。CPU啊,但是呢,大家可以看一下我刚才的提交参数啊。并行度指定的是多少,嗯。那每还有一个参数咱们要关注,就是每一个task manager,咱们给了几个槽啊。是不是两个草啊?也就是说我每个小D,哎,这是一个小D,它是不是有两个草,那我并行度指定为五啊。我是不是至少要占用五个槽这个任务才能跑对吧,也就是说要五个槽是不是至少得三个容器啊。因为三个容器,你的槽数是达到多少?等于六个才大于等于五嘛,任务才能跑起来,这个大家应该都明白啊,咱们的槽数要最最少,最少要等于最大变形度,那么变形度现在是五。
02:12
所以这是不是需要三个task manager?三个task manager是不是等于三个雅安容器啊?那咱们现刚才看到是几个四个。你忘了算谁呀,老大呀,Job manager,他自己是不是也得有一个?对吧,所以四个容器好理解,那么接下来的问题就是什么呢?我这个每个容器多大的一个。呃,线程数呢,核心数呢,正常来讲咱们默认是什么呢?呃,你一个task manager有几个槽,它就会自动去申请。当前容器就会申请几个微扣。好,既然如此的话,咱们。像task的容器是不是应该需要两个扣啊?那每个都需要两个,每个都需要两个,这不就六个的吗。
03:03
需要六个核心的嘛。那再加上job manager,我算你一个是不是应该要七个核心呢?这个大家应该能算。然后那你看现在只有四个。难道咱们前面说的错的吗?而且那也是官网说的啊,你去查阅一些资料也是这么讲的啊,有些曾经就有不少人来问过这个问题,其实这个是谁的问题?雅恩的问题。你的雅安配置的问题。雅安呢,咱们是不是有个概念叫调度器?对吧。那我们知道雅安调度器,咱们正常的要么用容量。要么用公平。就这么两种。咱们生产上。那你如果用的是公平调度器,应该不会碰到这个问题,但如果你用的是容量调度器,可能就会有,这跟它的一个策略有关系,来带大家看一下啊。
04:02
C哈豆,ETC豆。在这里面来给大家看一下核心配置文件,咱们都知道有四个什么杠对吧,但还有一个呢?是不是容量调度的一个配置文件了,容量调度器的配置文件来看一下。Set nu,看一下行数大概呢,在30多行这个位置。啊,你不一定是30行,因为你跟我配置可能不一样,有一个叫什么。资源计算器这么一个配置项,它默认的用的是一个叫default。默认的资源计算器用的是它。这个计算器有一个问题,他申请容器的时候,它的参照依据只有一个东西,叫什么内存,他不会去考虑你CPU的需求,也就是说我不管你有多大需求,反正我默认只给你最小核心数,那么最小核心数默认是不是一样?也就是说你会发现每个容器它都给你的是一个核心,问题就出在这里。
05:08
所以呢,如果你出现我说的刚才这个问题,你就应该去调整这个计算器策略,那调整成哪一个呢?哎,这个是我拷贝过来啊,拷贝过来你应该调整成这个doin。这个呢,它会综合考虑内存加CPU的需求,去给你申请资源。来,我们给大家直接试一下啊。这样我把下面这个注释放开。把上面这个付掉。诶,啊,相反了。好,那现在我们是不是指定为这个董妹了,对吧?好保存退出,不要忘了分发一下,咱们是集群。
06:05
好,分发完之后,咱们需要重启,用你改的配置啊,停掉盐就行了,其他不用重启。把停了,我先把刚才这个截个图。啊,这是第一次对吧。好,看一下停了没有?好,雅安没了,再接下来咱们启动雅安。哦,应该先把作业停了对吧,这种算是意外宕机啊。好,稍等看一下页面可以刷新了没有?好,已经重启好了,同学们。现在是可以了,那这个时候呢。我回到link目录下面啊,1.13。我刚才的命令,诶。
07:01
这个是咱们刚才提交病例啊,并行度是五。那这个内存呢,这四个G这个无所谓了啊。每个task manager的槽数的slot数是二对吧,也就是说他会申请三个task manager,咱们都算过了,提交。等待他。帮我们启动flink集群。好了,作业已提交,来瞅眼刷新。大家现在可以看到。变成啥了?一个容器,一个CPU。这跟说的不一样,对吧?啊,你一会再刷新就知道它最先启动的是不是job manager。本manager启动完之后才会去启动task manager对吧,所以来我们刷新一下,诶现在大家就可以看到。咱们的CPU。呃,虚拟核数是不是已经达到了七个,七个怎么来的呢?咱们说了每个他每个小地是两个槽。
08:08
对吧,那咱们的并行度为五个,那么经过他一计算,是不是需要三个TM。三个TM每个两个槽啊。咱们调整的策略,他也也会考虑CPU资源,所以他。一个container。是不是两个核心呢?那咱们一共有三个,那是不是六个核心呢。那是不是六个和就有了,再加上job manager一个核心,那是不是等于多少七。这样才是合理的。这个呢,就是要给大家提的这个事儿啊,你基于演提交容量调度器这个核心数的问题。要不然你都用一个核心去跑,那肯定效率比较差了。这是咱们的这个问题策。
09:05
那么另外呢,再给大家看一下。我这边再提交参数,再指定一个,强行指定雅安的核心数,那又会有一个什么样的情况呢?来,咱们把刚才作业停了。咱们优雅一点啊。OK。好,已经停掉。这个命令。跟刚才的区别在哪呢?刚才的区别在于我指定多指定了一个这个东西,那么目前咱们用的这个新策略,刚才是不是四个容器七个核心对吧,接下来我们对比一下啊。刷新。
10:00
那最终稳定下来了。看一下。刚才是四七。现在多少四跟十。也其实这个核数也可以强行定啊,不一定说一定你slo是一一呗,Job。一个。是吧,这个是强行一个,那task manager,咱们说每一个都是两朝啊,那正常是申请两个核心。但是咱们刚才啊,在参数里面指定我要多少三个核心。那根据并行度等于五,我们算出来需要三个TM。也就是说三个容器,那是不是三乘以三是九啊。也就是说现在我们一个容器task manager的容器申请的。是三个核心数。也就是说对吧。啊,不是1:1的。这也是可以的吧。
11:00
也就是说你怎么提高CPU利用率,除了你去调整数并发度之外,你还可以指定多给一点线程数。那么我们知道这个slot它主要隔离的是内存,它不隔离CPU资源,并且呢,咱们slot是不是还有一个共享机制啊,一个slot里面是可能同时在跑多个task。也就是说一个厂我不一定说。使用的一个线程。这是不一定。就是。通过实际的案例让大家感受一下这个CPU怎么来调,当然默认情况下咱们还是让它自动去设置,自动呢,就是跟曹数1:1啊,这就够了。这就够。那如果你要让CPU线程数跟数达到2:1,也就是说多给1.cpu资源的话,那你就可以通过咱们刚才这种方式,哎,提交的时候指定容器的一个核心数。当然这个。
12:00
不要忘了雅安配置文件,就雅安杠里面是不是有个核心数的最大值啊。啊,你不要超过那个值啊。默认应该是八吧,啊,当然可以把最大值调大一点,如果你需要的话。是关于C合理。
我来说两句