00:00
那么到目前为止,咱们看到的源码是什么呀?呃,咱们这个job manager里面的三个组件是不是都提起来了。这是咱们目前看到的,呃,梳理到的一个过程,对吧,那接下来该干嘛呢。是不是该呃申请资源,然后去启动启动一些小D啊task manager对吧,接下来是另一大阶段了,好吧,另一大阶段job manager3大组件基本搞定好,接下来那由谁来触发下一阶段的动作呀?啊,也是这三个组件来触发的,我们当时job master是不是启动完,我们没深入去看呢?对吧?哎,接下来我们就要来看它启动完之后做了什么事情啊,做了什么事情。那么诶在哪找呢?我们直接从文档找会方便一点啊。咱们是不是启动了job manager对吧,应该呃叫master会好一点对吧。
01:06
这个大家可以自己改改名字啊,那么往下翻往下翻我们就不要再反复去跳了,直接找到对应的位置对吧。好,往下往下啊,你看这套了多少层啊,这。那是不是在job master这个类里面,哎,我们当时是停下来了,对吧,好。就master,就master。诶,是不是就这啊。就这吧。哎。呃,这就是咱们前面那一块啊,那么大家呃,有点忘也不要紧,你就知道这一块该启动的一个逻辑对吧?那么启动逻辑我们说是不是有两个,一个是真正启动job master,另外一个重置和启动,呃,调度相关的东西,那我们现在就要来看这里。
02:05
看这里来点进来啊,这个start job master service,然后呢,心跳,你看它是不是也有心跳。啊,那这个心跳我们看看跟谁呀。他什么你你身为老大,你是不是得跟小弟有个交互啊,对吧,你把任务分给他呢,你是不是得他说哎,你定时给我汇报一下进展怎么样了,是不是,哎。那resource manager为什么要跟他保持心跳啊,他是不是得跟他实时交流啊,诶说我现在资源运行情况怎么样,够不够,还要不要再申请对不对啊,那resource manager我们说它像一个什么,是不是像一个管家一样的?对吧?哎,他像一个管家,那job本master本身是一个老大,对吧,主人,那么task manager像一个什么,是不是小弟啊?哎,你这么来类比,你就搞清楚他们的不可描述的关系了啊。
03:03
好了,那我们呃,标一下图图。呃,启动心跳服务。跟谁呀?呃,一个是task manager,一个是resource manager啊。好,往下。这里干什么?哎,这边是我们要进一步深入的一个细节,Job master内部有一个啥呢?有一个东西叫slot pool是不是pullol,是不是池的意思啊池哎潮时对吧?哎,那我们看看官方怎么讲的呀,启动这个槽持。啊,确保潮时接受消息,说白了就启动呗,啊就一个启动好,这是它的启动细节啊,启动slot。诶,说到这个特有的东西,Resource manager是不是也有一个。
04:02
Resource manager里边那个叫啥呀?Manager是吧?哎,就这两个小细节啊,好,接下来呢,重新连接到resource manager对吧。呃,这个重连接就不用看了。那么看这。接下来到这一行啊,到这一行。啊,我们把这几个重要的标一下啊。你看你看他怎么讲的啊。作业准备就绪,尝试建立与resource资源管理器嘛,Resource manager啊,这是flink内部的啊,尝试与它建立连接,好吧,那建立连接我们看这一行。啊,领导对吧,又来找领导了啊,这不用看了。好,先看这一段。接到领导通知建立连接,又是废话对吧?N的最后一行。
05:04
插槽池是不是就slot?呃,Poor对吧,开始请求插槽,所以咱们这个请求来源是谁呀。是不是job master里面的。Slot pool,对吧?因为只有他才知道我需要几个槽吗?他是不是已经拿到了一张图啊?对吧,他自己是知道的啊。好。那我们接下来就看这里了,到底是怎么申请的,哎,我们说啊,我这边给大家写一下resource manager建立。连接,那同时之后呢,Slot。Slot pool。开始什么?请求支援。对吧,这是不是一个核心逻辑啊,那咱们接下来往里看它这个start大家注意,现在要开始套完了啊,套的过程大家就看一眼就行了啊。
06:07
来跳,哎,是不是有领导选举啊?CTRL加H,接下来应该。是不是stand alone啊?好,深圳的。找到start方法。然后呢?哎,大家注意,这个不是leader选举啊,这个是leader什么?Lead巡回啊,Lead巡回这个不是啊,不是那个选举那个单词了啊啊,所以你会发现start方法不是咱们熟悉的那个什么grand leadership对吧?啊,不是那个东西啊,当然这个名字大家不要去去记啊,没有意义,没有营养,大家知道我怎么跳的就好了啊,大家就是熟悉一下呃,方便你以后自己想追的时候去追啊。来,往里点。往里看啊呃,没用啊,加锁对吧,呃,检查赋值好给我们无所谓,核心在这啊。
07:08
哎,怎么讲。通知一个监听器对吧?Listener监听器,呃,因因为我们已经知道了job manager的地址对吧?啊啊往里点他通知到了干嘛呢,又是接口继续跳,没事,CTRL加H找谁呢。找谁?咱们是从哪点进来的,是不是job master启动的时候去连接resource manager。对吧,好,那你看这个是不是。印哪里啊?就把master里边的什么呢,监听器。对吧,它连接之后是不是有了监听器啊,哎,所以应该是找这个啊,这个大家知道怎么找的就好了啊。
08:04
因为这些跳转你记记跳转过程是没意义的,同学们啊,你要大家要记得是我跳转完之后里面的核心逻辑啊,那个才是大家要记忆的啊,来往里看啊,现在我们回到了job master这个类,它里边有一个内部类,是不是内部类是resource manager的一个监听器啊好。调用到这个方法,结果我们发现他又执行了一个异步的是不是。Asy nc异步啊好,是不是执行这个。又来notify对吧,又来通知,好,我们点一下通知啥呀。啊,又来到通知这里面,首先呢,Resource manager的地址获取到,获取到之后。是不是再连接重连接对吧,Recconnect。就这啊,然后呢,往里继续追,哎,结果我们发现它重连接的时候先关,然后再重新连对吧,这就重连接,所以我们是不是要看连接的时候啊。
09:11
好,再继续套啊,同学们点。哎,尝试连接里面,我们发现地址不为空,他就去连接,是不是又套了一个啊再点。套到这里了,同学们。是不是最终到这了啊,连接到resource manager,那前面这些没用没用没用,对咱们来说都没营养对吧?好,那这边new了一个。连接啊,利用了一个连接,然后呢。这个才是咱们要看的东西啊,Start。师大。那接下来。又得进来,你看。大家注意这一块比较绕,比较绕。
10:03
呃,比较让大家选择性的去记忆吧,好吧,呃,我开始点了啊,同学们。Start啊,获取到连接之后,Start,它是start做了什么事啊,同学们他这边。啊,我们看这两行,因为前面这两行是检查对吧,校验没用啊,创建一个什么。注册对吧,创建一个注册。注册链接嘛,哎,然后呢,这个新的注册对象它会怎么样。启动注册对吧,启动注册那这一块呢。嗯,我写一下。创建注册对象啊。那这一块呢。开始注册啊,他这边有一个注册动作,谁向谁注册呀,呃,咱们是不是job本master跟谁连呢?Resource manager连接对吧,也就是说他向他做了一个注册啊注册好,嗯,不啰嗦了,咱们直接看这一行创建的时候点进来,那么我们会发现。
11:21
这里。是不是生成一个注册呀,然后我们就给我们来看一看,它的这个注册指的是什么东西,对吧?啊,然后我们点进来之后啊,发现抽象的CTRL加H找实现找谁啊。如果大家现在应该隐隐约约有点感觉了,能够猜出来选哪一个对吧?对不对,哎,我们看源码培养的就是一种感觉,对吧,后面比如说你接到呃工作之后接到别人的祖传代码,对吧?啊,那可能啊,你就比较费劲了,那可不能套,可不一定套了底层的,咱们这些是写的比较规范一点的,当然他逻辑写的复杂了一点啊好没事啊,我们进来看生成的时候怎么生成的啊。
12:16
你看这个是不是在job master里边,它的这个还是这个内部类啊。Connection啊好吧,那这边它里面有一个生成注册的一个方法,那里边后面呢,还有一个什么。是不是注册成功啊,调用的方法对吧?哎,大家知道这个就行了,那比如说呀,你看啊,咱们这个注册方法,呃,生成的注册里面,我们看哪一个呢。看这个。注册什么?把脚本门者注册过去对不对啊注册过去。
13:04
嗯,这个不是咱们关心的细节,好吧,你爱注册就注册嘛,对不对,嗯,注册呗。呃,那我们回到之前。诶,那个怎么会不见了,同学们。啊,在这里在下面对吧,哎,咱们之前是不是。创建的时候是做了一个注册对吧?啊,那咱们这个就不管了,我们回退一下啊,回退一下,回退到这是不是开始注册的呀,对吧,那开始注册。注册完之后,是不是应该调用一个注册成功的方法呀。对吧,哎,我这边给大家。标一下,我们说注册成功之后怎么样调用on。那叫什么来着?
14:00
不要用这个啊,不用这个,呃,这个我们瞅一眼吧,既然都说了啊。那你看是不是,诶大家注意像这些写法大家先眼熟一下啊,是不是RPC服务connect对吧?呃,RPC服务connect一下对吧,就是connect大家熟悉一下就行了啊,其他不用。那么这边呢?那太啰嗦了,不看了啊。这个也没什么营养,那咱们接下来看什么是不是注册成功啊。对吧,大家逻辑没乱吧,是不是,呃,创建注册注册,然后执行注册,注册完了之后是不是该执行成功之后的逻辑啊,好,我们回过来直接看就行了啊,不要啰嗦。注册成功。啊job master里面的注册成功。那这里面呢,找这儿。
15:01
因为它也就这个地方执行的一些操作嘛,对不对。那这个单词啥意思呢?来建立对吧,建立resource manager的连接,你看又开始了啊。又开始了。同学们。好了,然后这里面呢,我们关注什么呢?呃,如果连接不为now,然后呃,有IDE就进来了,进来之后呢,获取到一个getway对吧?啊,这个是通信模块的,咱们啊回头再讲啊,这边啊是通信相关的啊好了,然后呢。建立了一个连接对象,建立完之后,诶,核心是在这一句话。诶,大家注意是谁来建立连接的。我们说job master去注册也好,去请求也好,那最终到这一行,我们发现是谁来执行的,哎,Sloter。
16:06
Poor。连接到resource manager,然后其实干什么呢?请求资源,哎,是slot to干的事啊,是他干的好事啊。好了,往里走,我看看咱们这边要不要走太深啊,走太深的话。啊,行吧,那就直接走。因为也剩不下多少了,对吧,好,那我们在slot po是一个接口,它有一个时间内对吧?哎,我们来这里面找一下。好。找到这个方法,那我们看呢,呃,这个校验赋值无所谓,然后呢。是不是不是主要是这句话来再给他打个点,哎呀点错点错了,这叫什么请求,Slot从哪里请求啊,Resource manager对吧?哎,咱们是有依据的,对吧,向resource manager请求slot来点,点完之后呢,我们再看。
17:17
这里面又是一堆校验对吧,呃。设置一些环境信息啊,这个无所谓啊。那我们看哪呢,我瞅瞅啊,太太多了啊。我看看这个是什么啊。获取ID取消,哎不是这一块对吧。不是这里啊,不是这里再往下哦,在这你看啊,是不是请求新的slot对不对啊。从哪请求resource manager啊,然后呢,这里面呢,我们看看。哎在这,哎在这你看。是不是通过一个叫gateway的东西去调用了一个。
18:03
请求slot。是不是在这这里就是真正的向resource manager去请求了啊,真正向他请求了,好了,接下来我们就看他咋请求的,点我们发现来到了getway,其实这是远程调用了,为什么咱们之前代码是在哪执行的。是不是job master执行了,那现在你是不是想要命令别人去做事情啊,对吧,就像网上那个段子,你在教我做事对吧?啊啊,大家有的没看过对吧?啊,没有,那就小段子好吧,啊,那个吴孟达啊。那个警队之谷。曹达华的。那么他这边是不是要命令resource manager给他提供资源啊,那这边其实涉及到了什么。是不是一个RPC啊啊远程调用啊对吧?哎,呃,这个远程调用跟这个有关,咱们第二章再讲啊好,那我们这是个接口找实现。
19:09
谁呀?我们先看父类吧,好吧,是不是先看这个resource manager。好,看看他有没有啊,诶他有对吧,好,有的话咱们直接看他现在是不是接收到别人的请求slot了。好,接下来他干嘛?来由谁去向雅恩申请?由谁去向雅安申请slot manager?哎,这就是我给大家强调的更细节的两个小组件啊,我们说,呃,Resource manager内部的slot manager去。像。比如说雅恩的resource manager申请资源啊。
20:06
啊,Resource manager内部的manager去向雅安的resource manager申请资源啊。这一块是大家要知道的这一行代码干的事,然后呢,接着注点,那我们发现又来到了一个接口啊slot manager这个接口,那在这里面呢,咱们找,诶是不是有个实现啊,很明显对吧,它的一个实现内好双击找。找里面呢。判断打印,呃,封装请求这些咱们就不关注了,他封装完请求之后,诶执行了一个什么。请求动作吧,对吧。这个是。呃。真正去申请slot的方法对吧,这个就是slot manager,他怎么去发,呃,就接收到别人的要求之后,他再去请求啊,就在这个方法里边啊。
21:09
点,哎呀好多呀,好我们看。呃。获取一个配置对象对吧?Profile,那后面呢。如果存在就执行这个,如果不存在,就执行这个。那么我们现在应该走哪一个?是不是应该不存在啊,来我这边咱们看看啊啊啊。是不存在,哎,确定没错啊,确定没错,那么大家想想上面这个逻辑什么时候走啊。呃,是不是其他模式可以走这边了,比如说雅安筛是不是以以比如说有些空闲的槽已经有了,就不用重新申请,对吧?那么如果槽不在不不够,那就走这儿啊去申请。
22:08
来这个啊,名字贼长对吧,Fair fair填充对吧,完成履约履行啊就实现吧,好吧,实现一个什么什么槽的请求对吧,无疑是什么什么一大坨,好,我们点进来。啊,点进来之后啊啊,先查找一下空闲的匹配的槽,这些无所谓了,来咱们看一下。你看如果存在,那怎么样,加了一个飞,是不是不存在啊。那是不是就应该咱们现在是不存在吧,是不是应该进到这里啊。这里是什么?你看方法名。分配资源嘛,哎,说白了就要去找资源了啊,找资源了好点,找资源进来之后啊,你看他获取了一个什么。
23:08
已经注册过的槽的数量,还有这个呢,是挂起的槽的数量。啊喷嘛,就是挂起的嘛,啊挂起。呃,那这边会做一些判断,同学们啊,做一些判断,还有这边做一些判断。还有这边。什么呢?分配资源,分配完的结果再加个非对吧,再进来。所以我们真正。执行分配的在哪呀?是不是我圈起来这个方法。对吧,应该是这里啊。前面做的是啥,前面都是做了is,就判断一下这个数量超不超标嘛,对吧,Is match对吧,匹配一下,那后面这里是执行的是一个动作对吧,分配呀,这可是分配资源啊。
24:05
好分配资源啊,这个也很繁琐,我觉得点进来之后我们看一下填作家。嗯。是不是在这里有一个。啊,只有一个实现对吧,好。哎。呃,同学不要慌,已经马上看到胜利的终点了,你看这个resource manager。干什么呀?这是什么?启动一个新的worker?对吧?是不是该去取task manager了?是不是该告诉雅,你要给我取几个容器出来啊?对不对啊,这里我ER指的就是容器嘛,对吧,好点。没事儿抽象了,再找找谁呀?应该是active吧。
25:02
对不对。是不是?啊,咱们前面都是看的啊。来这里面干嘛?呃,是不是去请求啊,对吧,哎,我们这边快速过就行了,请求进来怎么请求的呀。当然你有兴趣你去研究了,因为这边涉及到雅安了,对吧?啊。嗯。诶,我记得里面有一个容器啊,就给大家瞅一眼就行了。嗯。容器啊,那可能不在这儿,反正咱们是不是现在已经知道去请求新的工作节点了,小弟对不对啊。
26:04
那这一块到目前为止呢,咱们就把。一些更深入的细节,包括他启动之后做了什么事啊,给他简单看了一下,对吧啊。
我来说两句