00:00
我们现在已经知道了,在flink运行时啊,有这样主要的四大组件,而且我们基本上也了解了他们每个组件的基本职能啊,要干的事情是什么啊,我们现在现在就发现了他们四个组件在描述它职能的时候,其实主要除了这个task manager是用来干活的,那其他的三个job manager resource manager,还有这个dispat,他们主要是在哪个环节有这样的用途呢?呃,我们发现它主要就是在一开始提交一个drop的时候,或者说我们在这个启动一个集群的时候,对吧?啊在在一开始有这些初始化类,类似于大家认为是一个初始化啊,创建这个环境的时候,他们的这个交互会比较多啊,那前面我们是根据每一个组件它的具体的职能给大家做了一个讲解,那接下来呢,我们就再来把它们结合起来看一看。在提交一个job的时。
01:00
时候,任务提交的时候,到底各个组件是怎么样来配合执行的对吧?相互协作的啊,那大家看一下这幅图,这个图呢,其实是一个比较,从一个比较高的层级给大家做的一个行为的抽象啊,所以这里边并不指代我们具体在这个集群启动部署的,部署的时候到底是s lo模式还是这个雅恩模式,对吧?这里边并没有去直接给大家把这个模式写出来啊,那这里边给大家看一下,呃,整个的这个流程应该是什么样的呢?大家首先从这个应用程序啊,这里边我们写好代码,然后接下来我们要提交应用程序,对吧,打好抓包,然后有一个有一个这个用命令行或者说web UI上面的那个提交的入口,直接把它提交上去,提交给。啊,大家看到这就是我们所谓的这个切入点对吧?啊,就是他给我们提供web UI,然后我们可以有这个HTP的方式去直接访问,然后去提交job,然后接下来如果有了这个dispa接收到当前的这个job之后,那我们说一个job就会就会对应着一个job manager去做管理,对吧?Job manager是整个job做调度管理的核心,所以接下来呢,就会启动一个job manager job manager,而且把当前的这个应用提交给他啊,所以大家看到前边我们这里边的这个dispa啊,它就在提交应用这一下给我们提供一个接口,就这一下有用啊,然后之后后边其实就已经跟他就没关系了,对吧?提交给job manager之后,接下来的操作就都是job manager跟其他的啊,这个resource manager pass manager去做交互了,所以接下来呢,下一步是干什么呢?我们说job manager自己。
02:49
被对当前的应用去做一些分析,他现在其实是可以拿到我们当前执行的那个步骤的,对吧,每一步到底做什么操作,然后呢,他会去做一个转化处理,就是把它做一个并行化调整,得到我们最后要。
03:06
跑在他manager上的那个执行图,然后就可以拆分出来我当前这个job到底有多少个任务,然后我就可以知道我到底需要多少个slot去运行,对吧?到底需要多少资源,那接下来干什么?接下来我既然已经知道了吗?我自己并没有slot资源,那就向resource manager去做请求。对吧,发出一个申请,我现在运行这个job,我已经判断出来了,我需要五个slot,我需要三个slot,那接到这个请求之后呢,Resource manager啊,这里边大家就看到了,那这个lo要从task manager那边来提供啊,所以这里边呢,Resource manager就去启动一个task manager啊,就是对应我们这里边需要多少slot,那它就相对应的去启动这个对应的task manager,对吧?然后这个pass manager启动之后呢,把自己的lo要向resource manager做一个注册啊,就是告诉resource manager,我现在每一个pass manager有多少,呃,Slot对吧,然后空闲的是多少,大家还记得我们那个web UI上首页啊,那个overview给我们展示的那个信息啊,就是有多少个task manager,然后空闲的有多少个,可利用的slot有多少个,对吧?那那接下来你既然有这么多空闲的,假如够数了,我知道。
04:29
能够提供这么多lo了,那接下来resource manager就向task manager发出一个指令,好,当前的这个job,你就给我们的这个这个job manager提供lo吧,对吧,把你的空闲的资源贡献出来,你来执行吧。那接下来task manager。这个一分配之后啊,这个指令一发出之后,大家看跟resource manager就又没关系了,对吧?啊,那接下来就都是job manager和task manager去做交互了,Task manager给job manager去提供slos,然后呢,Job manager就给它分发任务,呃,就是告诉你到底在lo里边要执行什么东西,那接下来task manager自己去执行就完了,执行的过程当中呢,可能task manager自己跟自己大家知道是集群嘛,对吧,那不同的集群上有不同的任务啊,有可能我们任务之间要交换数据,对吧?我前一步map做完了,后面又要做一个sum,那那接下来把它传到下一下一个任务里面去,所以这个时候可能会涉及到不同的task manager之间数据的交互。
05:33
这就是宏观来讲啊,整体我们任务提交的时候,各个组件运行时,组件他们之间的一个协调工作的一个状态啊,那大家可能会发现诶,这个看起来基本上是跟那个STEM模式基本上差不多,对吧,但是大家会发现它跟stan lo模式还不太一样,为什么呢?因为STEM模式下其实是要先启动集群的,而且我们是把那个task manager是直接定义好的,对吧,所以这里边的这个启动task manager这一步,在stand模式下并不是在这里才才启动的。
06:09
而是就是一开始我们启动集群的时候,他manager就应该提起来了,对吧,然后我们就已经向resource manager去做了注册了,告诉呃,大家知道我们那个三模式下,你直接启动集群之后,直接在web UI里边就能看到当前有几个可用的slos嘛,对吧?所以这些都是注册好的,四五两步是一开始就做完的,然后后边你去提交应用啊,然后启动drop manager之后请求slo的时候怎么样呢?它就直接判断你现在有没有足够多的,对吧,如果要足够有,有足够多的话,直接分配,然后去执行就完事了。那没有的话,大家记得之前就一直在转圈对吧,他等待我这里边提供更多的资源啊,但是等不到,那最后肯定就超时报错了,这是关于这个任务提交的流程,然后另外还有一个就是。
07:00
大家会想到,那如果在雅恩上面啊,我们用这个,呃,雅恩模式去提交job的时候,又是一个什么样的情景呢?诶,我们这里边给大家列出来的这个模式啊,大家看到这里边的这个模式,因为眼里边有session模式和drop模式吧,那大家看一看我们这里边的这种,这这幅图给大家讲的应该是session模式还是drop模式呢?大家可以看到我们这里面具体的提交流程我们过一遍啊,呃,首先我们这里边要把这个flink的jar包和配置传到HTFS上,哎,大家知道这个主要是为了呃,雅恩这边做管理启动我们容器啊,不同的这个资源容器来来应用的对吧?啊,那所以这里边其实是首先接下来我们真正提交job的时候啊,是要先提交job client客户端这边先提交job,这个job提交到哪里去呢?这就不是提交给大家看啊,不是提交给dispatch了,在这里边dispat好像好像就已经这个被我们包装起来,好像已经隐身了啊,那这里边直接提交给谁,提交给resource manager,这个resource manager大家注意。
08:10
现在我们这个还没有flink集群,所以这并不是flink的resource manager,它是谁的呢?这是雅恩的resource manager。啊,所以接下来我们其实就是应用雅恩作为一个接入点啊,就相当于这里边把我们那个dispaure的那个功能都已经包含进去了,对吧?啊,那这里边就是先提交给雅安的resource manager,我们先要启动一个什么呢?先起一个application master,然后这个application master里边会包含啊大家知道这里边有这个呃,No manager嘛,对吧,然后当前就是这里边这个application master里边会包含job,当前要要启动的这个job manager和嗯。以及就是我们要用到的这个flink内部自己的那个resource manager都在这个application master里边包裹着,容器里边包裹着,然后把它启动起来,然后这个如果已经起,起来之后,这这个怎么起呢?起的时候当然要加载我们那个已经上传的FNK的那些配置了,对吧?呃,构建当前的这个flink环境,把它启起来,提起来之后,那接下来的这个过程其实就跟我们上面这个一样了。
09:21
为什么呢?就是你你既然照搬经就提起来了嘛,而且我也已经拿到当前提交的这个应用了,我就去把这个执行图对吧,最后的这个执行计划图构建出来,然后我判断到底有多少要执行的任务,然后呢,我去判断到底要有多少资源,Slot接下来就向resource manager去做申请。啊,那这个申请的时候大家要注意这个申请这里边我们跳了一个步骤啊,其实应该是什么呀,我应该是job manager,先去向自己内部的flink的那个resource manager去做一个申请,对不对,对吧?呃,然后flink内部的这个resource manager,它自己本身并没有资源的这个控制权啊,那他怎么办呢?再向雅安的resource manager去做申请。
10:09
啊,所以大家看这里边就是我们这个就把它简化了啊,直接就由这里边的这个application master去向resource manager去申请资源了。然后这个申请资源之后resource manager啊,这里边这个箭头其实不是特别的准确啊,其实这应该是怎么样呢?应该是resource manager,根据我们当前所需要的资源啊,他会去。哎,就是去启动对应的那个node manager,然后启动相关的这个task manager,对吧?啊,就是有几个去启动几个,所以接下来呢,这个task manager启动之后,它会再去向我们本身。哎,这个本身flink内部的。Resource manager去注册自己的slot,这就变成了我们当前可用的slot了啊,然后当然这个对于雅恩而言,它其实就是你用多少才去,才去起多少嘛,都容器化了,所以现在其实就是说起起来之后马上就可用,马上就分配,然后接下来,接下来这个test manager就接收job manager分配过来的任务,然后去执行就完事了。
11:15
所以大家通过这个描述会发现啊,这个流程其实是一个pro drop的一个提交的过程,对吧?雅安上面啊,就是每来一个drop,我就启动一个application master,然后就相当于是起了一个flink集群,那当前的这一个job如果执行完毕的话,整个集群资源也就全部释放掉了,就重新重新分配了啊所以这其实是一个pro照模式,那大家会想到如果要是session模式的话,那那那是一个什么样的情景呢?啊,那其实session模式的话跟style模式就非常的像了啊,那大家就直接看这个我们提交的流程,它应该是怎么样的,那相当于还是我们的集群先起起来,但是呢,Task manager没先起起来,对吧?所以大家看前面我们这个流程啊,这里边是到来了job之后才去起task manager,然后去去向resource manager注册,这个环节其实更接近于我们提到的这个雅安的session模式,尽管这是做了一个抽象,对吧?
12:15
就是在这个过程当中,其实更像雅安session的那种那种分配的方式啊,那雅安session肯定就是说一开始我们集群先集起来啊,当前就有这个dispas跟resource manager对吧,然后如果要是说呃接下来来了一个drop的时候,那那呃怎么办呢?那那现现在我们其实就是可以直接把这一个呃job manager提起来,然后呢去向resource manager去申请资源,那自己的resource manager呢,还会向外面雅恩的resource manager去申请资源,对吧,就是过了一道这个雅恩的处理的控制的这个环节,那雅恩的result manager呢,还是跟后面我们这里讲的一样,就是他去自己去通知启动这个对应的task manager task manager一旦提起来之后,接下来的交互就跟这里一样了,对吧?啊,他向这个resource manager去注册,然后接下来如果可用的话,发出提供的指令,接下来照manager控制了这个对应的,呃,Task manager,那给他分配任务,他去执行,就是这样。
13:15
这样的一个流程啊,所以大家可以结合这几张图啊,把这个流程梳理的更加的清晰一些。
我来说两句