00:00
在已经知道怎么样启动集群,怎么样用不同的方式,一种是web UI,另外一种是命令行去提交作业啊,接下来这个提交上去之后就可以去运行了,那接下来呢,我们要给大家介绍的是,其实前面大家也已经发现一个问题啊,我们在测试的这个过程当中,一旦要是当前的资源已经被占用了之后。接下来再要提交作业的时候,那就必须自己先把这个资源释放掉。然后才能去提交别的作业,那或者呢,你如果要是不想这么做的话,那就怎么办,那就只能是把我们当前的这一个集群里边再增加机器来,再扩充这个资源,然后再去做对应的这个提交,我们必须手动管理这一切,这种提交的方式显然是不够方便的,你在真正的这个企业级的应用里边,我们更希望就是说有一套这个平台帮我们把这些东西都搞定,资源不够了,你再去申请啊,你去申请更多的资源来了之后给我启动,我只要能够把这个集群起起来,能够把作业跑起来就完事了,你不要总跟我说不够资源。
01:06
啊,所以在这种场景下,那自然就是说flink部署就应该要跟不同的资源管理平台要结合在一起,啊,这就涉及到这个不同的资源管理平台了,而在这个介绍这一部分之前呢,我们先要给大家介绍一个关于部署模式的话题。啊,这个部署模式有点意思,就是它是它指的是什么呢?是flink给我们提供为不同的场景,不同的需求提供了不同的部署的方式。这是什么意思呢?我们先来看一下到底有哪些方式吧,主要有三种,一种叫做绘画模式session mode。另外一种叫单作业模式pro job mode,还有一种叫应用模式application mode。诶,这三种模式看起来就是说一种是我们提交这个作业的时候,是一个session,是一个绘画。
02:02
另外一种呢是a drop,那就是每一个作业单独提交了,看起来就是这样啊,然后最后还有一个是应用,哎,那它这个这些区别,它们的含义到底是什么呢。主要就在于集群的生命周期,以及资源的分配方式啊,那接下来我们就具体来看一看啊,首先我们看这个绘画模式。绘画模式其实是最为符合我们的常规思维的一种方式,它的方法就是什么呢?就是掀起集群。启动集群之后,这就相当于保持了一个绘画,一个session,大家还记得之前我们这个启动的时候啊,这里我们就把这个直接关掉了啊。还记得这里的这个stand吗?所以大家会看到这里面其实启动的就是一个集群的会话,对不对,因为一开始启动集群的时候,里边并没有提交任何的作业,没有在运行任何的任务,所以当前的集群呢,它就是保持了一个绘画等待作业提交。
03:04
啊啊,那那这个其实非常好理解,就是先有集群后在里边去提交作业,那这个集群所有的资源,那就应该在启动的时候就已经确定好了,就这么些task manager对吧,然后他划分的那个task task slots就就那么多啊,那接下来在集群里边提交的资那个作业就会竞争这些有限的资源。哎,这就是我们所说的session mode。当然了,呃,大家就会想到前面我们介绍的这个给大家提提交的这个过程啊,呃,启动集群之后,然后提交作业,这种方式是什么呢?这其实就是绘画模式对吧?啊,这因为它的资源有限嘛,标准的绘画模式它的优点在于就是相当于我们的集群掀起起来了,非常的方便,对吧?啊,所需要的资源一目了然,就是这么多就固定好了,就放在那儿了。
04:00
然后接下来呢,呃,就是作业就不用考虑这个集群的问题了,集群就就活着,一直活着,就在这儿了,集群的生命周期超越于任何作业之上。也就是说作业有可能我们把它Q了啊,对它cancel了啊,也有可能我们把它这个直接给feel掉了啊,直接直接把它挂掉了,但是这个集群始终是存在的啊,大家看我们这里边所有的作业都取消了,集群依然在,对吧,这里边还能看到当年的集群的状态。一群不跟着作业的状态而改变打的营盘流水的兵啊,而这个作业如果竞争资源竞争不到,那怎么办呢?那就等它结束掉吧,或者把它取消掉,去释放资源。那这个缺点也是非常明显的啊,因为你资源共享嘛,所以一旦要是资源不够,那作业提交作业就失败。啊,所以这种模式下,一般情况呢,最好大家还是要去结合一些另外的资源管理平台去用才更加有意义啊,你实际我们前面那个直接在flink里边起一个集群,这种方式一般企业是不会用的啊。
05:09
这是绘画模式,绘画模式比较适合什么呢?适合规模比较小,单个的规模比较小,执行时间比较短的大量的作业,他什么意思,就是说每一个作业都很小,然后呢,执行时间又不长,诶所以它执行完了之后就释放资源,然后接下来呢,诶,我们就在跑其他的那些那些呃作业,这样的话就可以充分利用资源,对吧,就不需要一遍一遍的给他分配资源,一遍一遍的去启动集群,就可以节省很多时间。那另外我们就自然想到了,那如果要是说执行时间长,然后单个又很大的那些作业,应该怎么去执行呢?那大家知道他其实执行起来之后,就一直会占用资源,不会释放了,那这种情况下。很容易就会出现资源不足,需要去额外再去申请的情况,那这种情况呢,就比较建议大家使用单作业模式,单作业模式其实就是要把资源按照作业隔离开。
06:08
也就是说,每一个作业提交之后。就启动一个集群啊,所以大家就会看到了,这个时候的集群就不是一开始预先启动好了,而是等着作业来,作业提交了一。之后我根据这个作业为他单独的创建一个集群,一个弗林的集群,就专门为了处理这一个作业啊,所以我们就会看到他就是严格一对一嘛啊,那这样的话,我们这里边只要是这个作业结束了,这个作业被取消了,或者说这个发生错误挂了,那么整个集群也就关闭了。整个资源就释放掉了。那呃。在这个实际使用的过程当中,因为大部分的应用啊,可能都会是规模比较大,运行时间比较长的这种作业,所以说在实际应用的时候,其实这个单作业模式是首选,这里大家需要注意的一点就是flink本身,我们刚才启动的那个集群啊,弗林格本身是没有办法用这个单作业模式。
07:14
啊,因为你看我们刚才启动集群的时候,你必须先把这个集群起起来,然后才能去去做这样的一个提交,对吧?啊,所以这个单作业模式,它是需要借助,一定要借助一些外部的资源管理平台的,比方说雅安或者K8S,就是因为它有这个,呃,容器化的这种管理机制嘛,我可以一开始的时候不起集群,你有了作业提交的时候,我再去为了你单独去创建容器,创建节点,创建容器去把这个集群跑起来。这是单作业模式,另外还有一个比较特殊的叫应用模式,应用模式这个是后来新增的一个模式啊,早期的时候其实只有前面的两种模式。简单来讲呢,其实跟之前我们提到的单作业模式是非常像的,前面我们两种模式这个应用代,应用代码其实都是在客户端上先执行了。
08:07
是由客户端提交的嘛,客户端先要跑一遍我们这个代码,他为什么要跑这个呢?是要把对应的作业要拆分出来。好,所以在我们当前的这个代码里边,大家会看到这就是一个作业,对吧?啊,只有这标准的这个一套操作嘛,数据进来之后,然后做什么转换,然后做什么样的聚合,最后打印输出,这是标准的一套流程,那大家可能想到我一份代码有可能是不是有可能就会做并行的两个作业啊。啊,对了,有可能我单独的读两个流进来,然后分别处理。各自处理,那其实相当于是两个作业呀,所以客户端执行的时候,其实就会把它拆成两个作业,如果用单作业模式提交的话,那其实它是会起两个集群的。而应用模式呢,啊,应用模式就会给他直接起一个集群,因为是根据我们当前的应用,也就是一段代码来去判断一个项目来去判断的。
09:09
为什么要有这样的一个应用模式呢?主要就是因为我们之前都是客户端去执行,然后由客户端啊,把我们解析出来的那个。最后的那个作业提交给job manager,那这种方式客户端是要占用大量网络带宽的啊,他需要去下载依赖,然后把这个二进制数据发给这个job manager啊,那很多情况下,我们提交的时候,用一个客户端去做提交,它就变成一个瓶颈了嘛,啊,所以在这种情况下,我们就不要客户端,我们直接把这个应用提交到job manager上,让他去执行就可以了。诶,这个时候就是所有的这个代码的解析转换成作业,然后再去执行,全部是由job manager去做这样的一个处理的。那这种情况下,这就是所谓的应用模式。
10:00
啊,那所以整体来讲,它跟单作业模式非常的像啊,它都是提交作业之后才去启动集群,那区别就在于我们的这个应用模式,单作业模式是作业跟集群一对一,而应用模式呢,是应用,也就是说我们的提交的这个项目啊,当前的这个抓包跟集群一对一。这里我们提到的这些部署模式,其实都是比较抽象一些的概念啊,大家也看到了啊啊,那所以接下来呢,我们其实更重要的是要给大家讲一讲。具体到结合一些资源管理平台的时候,这些部署模式到底是怎么用?
我来说两句