00:00
好了,那刚才我们看到了开始调用用户的main方法,那么咱们程序启动的点是什么?咱们正常写一个代码,最后都会有一个什么?是不是有一个ECU执行啊,对吧,这边就是咱们要关注的点,那么那个类叫什么,同学们,我CTRL加N直接搜是不是对。Execution是不是这个类啊,然后把其他关掉。我们最后是不是Env.excute对吧?哎,其实是不是调用这个类里面的这个excu方法呀,接下来我们要做的就是找excuse。来CTRL加F12IS cute,你会发现有很多个为什么呢?层层调用啊。一些重载的方法,你看。这个里面调用了一个什么,呃,带参数的对吧,咱们里面是不是可以传名字啊,对吧?啊,其实就这样,你不传也行,然后他跳到这儿啊。
01:10
好再往下点,呃,做了一个校验对吧。嗯。不能为闹对吧,这种是咱们传的时候啊,这个无所谓了,是不是又调用了一层啊。但是这里往往很关键。里边干了啥?还记得咱们有几个图吗?哎,这个图当然咱们讲到调度的时候展开讲,现在先留个印象,是不是的时候获取了什么get,是不是获取了一个流图啊,哎,那里面的逻辑咱们现在先不用看啊。获取。使俊。Gray啊,并接着执行对吧。这是一个核心的代码。在在这。
02:04
好,再往里点。你看咱们点了三四层嘛,对不对,很费劲,其实里面还有一层。对吧,还是一个cute啊,那我们先从后面这些呢,大家不用看了,这是什么执行结果呀,然后做一些判断了,就是后续的事儿了啊,这是后续的事儿了,那核心逻辑还在哪里啊,在这儿啊,再给大家点一下啊,防止大家找不到啊,找不到我们说执行对吧?啊,这边也不用讲了,就是执行嘛。接着往后走点。在这儿呢?我们看啊。前面是不是检查校验呢啊,检查是否为空对吧,然后接下来是不是获取了一个什么factorttery对吧?就执行器的工厂嘛,呃,Flink源码大量使用的Java里面的一个工厂模式哈,所以大家会经炒到什么什么factorttery factorttery啊,大家知道就行了啊,工厂模式的话就是一个工厂内嘛,呃,创建实力的时候都是通过工厂来创建的啊。
03:14
来create,一般都调用一个create方法啊,那这个咱们也不过多去讲了,往下看又一个校验啊,不用看对吧,不看再往下看,诶这里是核心逻辑。他是不是get了一个E对吧?哎之后呢,这个E是不是调用了一个ECU,哎,这一行是关键。这一行是关键,那么这边获取的ex是啥呢?这种叫piline piline是什么?管道吧,水管嘛,哎,说白了就像流一样嘛,水管经过一个水管这样流过来嘛,水管啊。那你你会发现这里有好多好多。
04:01
我们简单瞅一眼,是不是有remote模式啊,还有什么?页面提交,还有雅安就吧。对,Local。还有什么?内置的还有什么雅安session的,呃,K8S的mini对吧。Mini class的一般是本地测试的时候用的,呃,大家会发现一些,呃文章资料,他老喜欢用mini class来讲解,对吧,但那个没有代表性,为什么?呃,咱们雅安模式跟它还是有些区别的啊,有些区别啊,就简单了解一下,有这么多个执行器啊,它封装了很多啊,来我们直接看。是把这个图传进来了,这里有个小细节,是不是把用户代码加载器内加载器传进来了,还有一些配置对吧?好。好点。就是这个,那咱们现在好,刚才那么多点掉了啊。
05:01
刚才也介绍了有那么多的。SQ的,那么我们应该用哪一个呢?CTRL加H跳出来这个对吧。应该哪一个。Local吗?内置的吗?啊不是,其实这两个是不是看得见啊。是不是job对不对,哎,我们一猜就知道啊,那里面呢,是不是有一个雅恩job class对吧,我们先看它的这个。呃,应该在这个里边啊。讲到他其实写在这儿会比较好一点,因为只有一个实现嘛,那你还做个抽象类干嘛,对吧。哎,我也不知道他这么设计的原由是什么,可能是未来想扩展吧,啊啊,有道理啊,有道理,来我们搜索这个方法cut,是不是一下子找到了,它就一个方法cut。接我们已经进入到了这个job class这里面。
06:02
那这边有一部核心的啊,咱们现在还不去讲,但这边做了什么事,同学们。作业图对吧?牛图怎么转成作业图,是不是在这啊?啊。来,我们写一下啊。将。讲什么呢,流图。转换成。作业图啊。刘图就stream gray嘛,对吧,我写还是写英文名吧。叫gra啊。那这一步呢,咱们得等到调度的时候再来看啊,再来看,那我们知道已经生成了一个作业图了,再往后瞅,那这边有这几个它的它的命名给我感觉很乱,对吧,他叫什么呢。呃,这边是获取了一个。
07:01
集群描述器对吧,它叫集群描述器,那么它你看又是一个工厂的模式,对不对啊,那这种代码大家不用深究,知道是工厂模式去创建实例就行了啊。好,那怎么创建的,呃,这一步咱们也得看一看啊。创建这个描述器啊,又是个接口,CTRL加H。你看可选的不多吧,哎,大家注意这种绿色的是不用去看的,这种是测试类啊。啊不不也不一定啊,就是一般的这种是,呃,怎么讲呢,也也不会去看,我们主要看这种。白的啊,白底的,白底的。你看这里是不是一个test对吧?啊,这种是他自己写的一些测试模块啊一些测试。那我们看哪一个。看哪一个。
08:00
很明显的吧,是不是这个,哎,雅安class client。点进来找哪个方法来着,是不是create方法好。那这边呢,我们看一下啊。呃,前面这个还需要看吗?是不是获取了一个配置路径啊目录啊,对吧,像这种配置封装来封装去的,咱们就不用过多去看了啊,不用过多去看核心逻辑在这儿对吧。Get是不是又掉了一层,你create就create,你好好的create他再get一下,对吧,很烦这个东西。来。这里做了什么事,同学们?哎,对。这边为什么要看这个,我们看看这个描述器做了什么事,这里是不是创建了。创建了雅安的客户端了,这个客户端干嘛的?是不是用来跟雅恩做交互的?
09:04
是不是跟雅安做交互的啊,创建完之后,呃,当然他是不是获取了一个配置啊,雅安的配置啊,有的同学说我没传参,我怎么知道环境里有。对吧,环境里有有路径吧,之前那个配置啊,环境封装来封装去的,它是能获取到的啊。那之后呢,对雅安客户端做了什么?初始化还有什么启动哎。都。出诶初始化和启动雅client,哎是在这里对吧,这个东西叫什么同学们集群描述器啊。你看他是不是。描述器需要的他是直接new了啊,把这个客户端启动的客户端传给他了啊。
10:03
那这个描述器。要不要看再看一眼?你看一大堆。怎么来描述集群呢?你看有雅安的队列啊呃,架包是否包含了flink的配置啊,雅安客户端,雅安配置就该有的一些东西,它是不是都有了对吧?哎,就这么一回事啊,那这个咱们也不用去看了,好。这个就是主要做的是返回再返回,再返回,再返回再返回。人家是不是很烦呐,对吧。啊,没事,所以我们这边把主要逻辑这里再给大家写上注释你就知道了。我们说呀,集群描述器里面。有什么?是不是创建启动了雅安客户端呢?呃,并且包含了一些。雅安还有flink的配置吧,对不对。
11:04
和其他的环境信息对吧。好,这个就是所谓的描述器啊。嗯。好,接下来往里看啊,还要接着看啊,那这边是什么呢。呃,这一块是对一些权限的一些配置项啊,你我简单给大家瞅一眼点点。呃。我看看这边有没有啊,那没有咱们就不看,不看这个东西,这个不关键啊。呃,我们直接往后看一,哎这个。哎。现在又是这个工厂,又获取了一个什么集群?集群特有配置。前面不是描述器已经拿到那些信息吗?然后再把这些信息给。
12:04
丢进去啊。然后呃,也不算丢了,我们看一眼就行了点,又是一个接口对吧,老方法C作加H是不是刚才那个类里面。点开。雅安对吧,好搜索。有没有?没有这个方法说明什么,这个方法是不是通用的?所以找他的父类吧,找这个抽象的好收。是不是有啊,好,这边又又封装了一次,对吧,你看。是不是job manager的内存啊,还有什么。Task manager的内存啊,还有槽数啊,每个每个task manager的槽数之后呢。
13:02
是不是set进去啊,哎,说白了是不是设置这几个东西啊,设置到哪里啊,叫特有配置的这么一个封装的类型里面,对吧,你看一个简简单单配置它过了多少手啊,一会一个传一个一个传一个对吧?哎,那我们知道是配置相关的就行了啊,那把这边写一下。返回返回,那这一步是做什么呢?将。呃,这个叫什么集群特有配置包含了什么呢?呃,Job manager内存,Task manager内存,每个。Task manager的数对吧,还有。啊没了,就这这主要就这三个对吧?啊,这是资源配置啊。
14:01
呃,资源配置。好了,往下看。哎,现在是这个描述器,大家注意描述器哪来的。是不是这儿来的?集群描述器啊。集集群的描述器做了什么事?这是一个核心逻辑。部署。校本模式的集群里面是不是把特有配置传进来了,哎,对吧。呃,那还有什么作业图,是不是也传过来了,对吧,好。那后面呢,就是开始部署集群了,来,我们接着往后看。The。点进来之后,咱们是不是找刚才创建的那个类型啊,CTRL加H应该哪一个。是不是雅安的这个对吧,好点双击找这个方法。
15:02
Deploy job是不是走到这里了?咱们现在是不是在描述器里边。对吧。好,在这里面做了什么事?又调用了一层对吧。部署内部的啊,Internal是内部的意思对不对。啊,内部的本身的啊,部署属于这个job的集群啊,是这个意思点。你看它默认的这个应用名叫什么flink job class对吧,那这个对应的默认名是不是这里啊。是不是这个啊。好了,呃,那这边呢,大家注意有一个地方要注意是这个。这个名字大家记住就好,这个叫什么了?是不是雅安模式,雅安job的模式的什么?
16:02
入口吧,诶,那么大家记住这个入口的名字啊,记住入口的名字。我把它截个图啊,回头才会用到啊,回头才会用的,来点进来。点进来之后,这里面我们往下看。这个方法你做了什么事啊?呃,一行看啊是不是获取呢,当前用户对吧,为什么要获取用户啊,因如果你做了一些权限验证,比如说你开了cover,那么他需要跟用户做一个权限校验,对吧?啊,这是用来做这个的啊。你看下面不就有了吗。是否covers的安全配置是开启的对吧,如果是开启的,它就这边啊再做一些判断,那这一块咱们是不是就不用看了啊,权限校验了啊再往下走。这里。Is ready for deploying。
17:01
什么?是否准备好了对吧?点进来看一眼。是不是又检查了一遍啊啊,这是小心谨慎对吧,检查了一下这个。加pass是否为空,再检查一下这个配置。配置路径配置文件能不能读取到对吧,有没有配置好了呃。再判断一下什么,这是不是雅N的最大和数啊,对吧。看一下我们配置好的核数是不是大于亚N,最大核数如果比它大是不是就不用提交了?啊,就各种检查啊,前置校验。那还检查了哈杜的。配置路径吧,哎,知不知道啊,就检查这些东西没了啊检查啊。我们写细一点啊,我们说。
18:01
部署前。检查检查什么呢,比如说什么价码路径啊。啊控路径啊,还有什么什么雅安最大核数啊,我随便列几个啊等等等等。等等等等。接下来呢,这个什么,这还用讲吗。名字很直白。是不是检查雅人的队列,咱们提交的时候是不是可以指定队列。不指定的话就是提交到default是吧,哎,他就检查一下你指定的这个队列在Yan里面存不存在啊。啊,因为这个逻辑比较多了,我都写一下,检查指定的雅安队列是否存在,再往下看。检查什么?雅恩是否有足够的资源啊,什么叫足够?就你需要的资源够不够你用啊,那这一块呢?
19:06
我们直接看就行了。检查雅安是否有。足够的资源啊。那这边简单瞅一眼,是不是获取了应用ID啊。哎,之后呢,是不是获取。最大资源的容量对吧,最大还能给你使用多少嘛,好还有一个。获取当前空闲的集群资源吧,啊这些都是雅安客户端去查的啊,通过雅安客户端来做的。呃,那包括后面有一些什么呢。这个参数大家应该要记住啊。是不是哑然单个容器最小分配的大小啊?这个参,这个参数是很常见的一个雅恩的参数啊啊。然后呢,就是跟雅安的各种内存啊什么做一个比较对吧?啊做一个判断校验。
20:06
好了,那么前面这些就。咱们就不过多去看了,就这么多东西对吧,好再往下走。是否是执行模式是什么?是detach还是normal detach是什么?就是咱们指定的一个杠地,那他就走detach,这个叫分离模式,就是客户端可以退出了。啊,提交完你就可以退出了啊。那normal呢,就是一直占用着命令行,对不对啊。一直保持连接啊。那这没啥,那关键在这儿。启动什么?APP master这个是不是雅恩上面就给我们起的?对吧,Am嘛,就所谓的am啊。嗯。终于走到了这里,对吧?那你别看前面这么长都是干什么,你就记住三句话就行了,检查检查检查没了啊,检查完干嘛启动啊,OK了,这个方法就跳过了啊。
21:16
开始启动am。好点进来。那这一块就长了,同学们啊,这一块就长了。
我来说两句