00:00
接下来我们就要来看这了,Disparture它启动的时候做了什么事,大家还记得前面介绍dispart主要负责什么?是不是两件事情?第一件事。是不是接收用户的作业啊。哦,忘了是吧,那第二件事是什么。是不是启动。叫我master对吧,准确来讲叫master对不对?好,现在我们就要来验证一下这一个过程,来点start,你看它是通过RPC相关服务去调用启动的呀,啊啊,然后是不是start。啊,那如果你再接着追,你是追不到的。呃,不是追不到你不好追,因为这个涉及到RPC,咱们没讲。但是咱们是不是,呃,直接先说一个结论性的东西,RPC服务它是基于阿卡的组件通信,那么他如果调用start,那对应的会去对方会执行什么?
01:08
应该应该类似的,都讲过,跟Spark有点像。是不是on start方法还记得吗?就别人调用一个start方法呀,最终他自己啊,接收到消息,就别人给你打电话说把门开一下,最终你是不是跑去开门了,对吧,那这个地方就像别人打电话告诉你,诶,你把门开一下,那on start是等于什么,等于你接收到消息之后,你去把门打开了。呃,大家先,呃知道这么一个对应关系就行了,比如说disparture Dis star啊,最终它怎么执行啊,啊,我们不用管通信过程的话,直接找dispart里面的on start方法就可以了啊好,启动dispart,那我们说接着看。什么start啊,这里给大家标注一下好吧,那dispar我们直接进入到它这个类里边。
02:03
啊,这个类里面part这个类,那么这里面呢,有没有on star呢?有吧。对不对啊。好,在这里你看它主要是一行代码。启动之后到这了啊,Dispa这个类,然后呢,我star啊,我再啰嗦一句啊好,接下来启动一个服务对吧,又开始层层封装了,我们要剥洋葱了,点点进来之后。是不是做了一个注册呀,对吧,好。再点。这边做了啥呀?好像没啥对吧,哎,为什么呢?同学们,因为咱们是不是在一个抽象的腹内啊。咱们其实它有一个默认的实现啊,默认的实现。
03:01
呃,那这个实现我们还是看那个时限内吧。咱们该看哪一个呢。啊,其实这也有,是我看差了,同学们不对啊,是我的问题啊,你看下面是不是还有啊。下面是不是还有。对吧,啊。这是第一件事,是不是把它自己启动起来并注册了呀,对吧,这块我们刚看的是没啥。呃,咱们写一下。这边是不是做了一个启动。服务啊,好,再接下来你看后面又做了什么事,这是第一件事情。第二件事情呢?是不是启动叫吧。
04:01
Recover什么意思呢?诶,怎么没有啊?啊,恢复对吧,启动一个恢复的job,其实是什么呢?呃,咱们直接讲解的job master,它是在这里面去起的。他是在这里面起的。好,呃,这里面呢,咱们再来看看它是怎么启动的点。啊,这边又开始套娃了,同学们,俄罗斯套娃啊,那这边很多个就要把它变利便利完之后对每个就要法是不是。开始去执行啊,用什么执行,同学们你看它的参数是啥。啊,这是名字吧,类型呢。作业图对吧,作业图。好。那是不是在这啊,那你看好费劲啊,再点,那你发现它又来一个是吧,Run job对吧,很有意思对吧,但其实你熟悉套路你就知道啊,闭着眼睛往里点就是了,对不对啊。
05:09
啊,再往里点啊,受受不了了。我看看这里到到了没有啊,还没到啊,还没到啊,是不是终于进入到run job里面,呃,这里面咱们看核心的这边做了一个校验,不用看这边获取时间无所谓。那后面呢?后面这是一些任务状态的获取,也不用看对吧,Get result什么future这些不用看了,对吧。那在哪,是不是在这什么。Job manager。好,就是这一步。啊,这也不用标了,这一步没啥讲的,直接进来看吧。好,他到底做了什么事呢?哎,再继续研究研究对吧?诶这里面呢,我们他获取了一个RPC服务,用来通信的,这不用管。
06:08
后来呢?这里面是不是又有一个拉姆达写法呀,那说白了是不是执行,呃,执行里面这些逻辑啊,对吧,啊,它是空仓的好那么。就本门酒装的是不是被创建出来了,是不是在这儿。好,这一行。嗯。创建job manager啊。就是这一步,那创建完之后,它得返回的叫什么呢?叫一个runner啊叫runner,那runner呢,它这里又干了呢,干了啥是把它提起来呀,这就是咱们之前所谓的dispatter去启动一个job master。那么为什么叫master呢?接着往里看,好吧,我们把先标上啊,启动啊。
07:02
起到job master。我们先来看一下创建啊,它叫什么名字,你看又开始。泡啊,对不对啊,没事,泡习惯了,就就像那句话讲的对吧,吐着吐着也就习惯了对吧。哎,往里看。他加载有点慢,因为类比较多,好,那我们可选的词有哪一个。我们说了绿色的一般是什么测试对吧?你比如说上面这个是不是在测试类里面,那这个是不是也是一个测试啊,那这个是不是也是测试啊,最后一个是不是也是测试啊,所以我一般给大家讲,就咱们这种绿色背景的不用去看啊,不用去看我们可选的只有一个默认的啊。默认点进来找这个方法啊,好了,在这里头。
08:01
终于进来了,对吧,Create job manager runner。呃,结果呢,你发现前面这些是一直在create,呃,然后也是呃,From conve创建出一各种东西,各种东西。各种东西对吧,哎,那么。Master对吧,啊。那么那个不重要,重要在哪里啊,这里又创建了一个工厂,我们说是工厂模式吧,啊说白上面这些咱们不用关心对不对,关心哪里啊,他这里。他是不是利用了一个叫本manager runner的实现呢?好,这里来。点啊。进来之后我们来到了job本manager的这个实现内啊实现类里面。这边还是比较。
09:00
比较不好看的啊,我看看在哪啊。呃,好像是这个吧,我没。我仔细看看。呃,前面都是参数赋值,这不用看,呃,校验不用看。呃,这也是一个赋值对吧,把用户代码复制过来不用看。高可用不用看这个不用看,那说白了就最后一行呗。对吧,Now start the。脚本manager是不是真正在这去创建它叫start,其实是create先,对不对啊,很深的这个同学们啊,再往里点你不是你看又来了啊又来了啊,再往里看,反正都是老套路嘛,对吧,你管它套的再多,我就一层层剥就行了,无脑拨啊,无脑剥衣服啊。你看他利用了一个什么。所以为什么叫他job master啊,你看他外面一直说job manager job manager,结果到里面来一个job master啊,所以这个很容易搞混啊,这也是有历史原因的啊。
10:09
以前包括官方资料把里边的也叫,有时候也会叫做job manager,这个时候同学们就有疑问了,它到底是一个进程呢,还是一个线程呢?对吧?啊就比较困惑,那么现在我们应该比较清晰了吧,首先am里面整体的进程叫什么?整体的进程叫什么?Job manager是吧?哎,呃,但如果体现进程名是不是叫什么什么entry point对不对啊,那么你这个进程里面不是有三个组件啊。Dispart。Job manager。啊,Job master还有resource manager对吧,那么其中呢,这个job master是不是由转发器来创建了其中的。啊,咱们看到这一步能验证这一块的内容了吧,对吧?哎。
11:01
好,这边咱们先打个点啊。当然这里面还有东西啊,这里面还有东西,那咱们就先不看了,好吧,啊,咱们就知道到这里他是成功把它。出来了。对吧。那六出来。我看看要不要看一下啊。呃,你看它参数动不动就是什么。十几个对吧?啊,真的是看的眼花缭乱啊。好。那咱们现在就看到创建的job master了,那我们现在要一步步的再把这个套娃一层层的包上去,对吧?回到咱们的核心,呃,咱们的主要逻辑上面,咱们刚才是不是通过这里进去一层层看的呀。好,那现在我们得到什么结论?
12:02
是不是创建了一个,现在是不是得把名字好好规范规范呢,Master特对吧啊。那创建完我们说它名字叫runner,最后呢。是不是大给他启动了呀。对吧,好,那么你点进来,诶之后呢,它是这个job manager runner这个接口,对吧?来我们找实现它是有一个时限内的。什么呢?Java manager runner。是不是它的一个时间内啊啊。大家会不会被被他套晕啊?啊,没事啊。来,你看又来到熟悉的一个东西了,这个叫什么?高可用的一个leader选举服务,对不对,我们说了是每个小组件都有啊,哎,大家不用你你大家可想而知,我这个点进去再点再点再点会变成一个什么,是不是让大家眼熟的那个方法,什么grand leadership是不是这个方法。
13:11
对吧,哎,不信的话咱们就来套啊,套一下来。点你看是不是又又来到这个接口,CTRL加H,我们说找哪个。弄对不对,好进来start。你看是不是又来到这里了?那大家眼熟的这个方法呀,好,那这个里面我们说了,点进来是个接口找实线,是不是有对应的各个组件呢,这跟刚才是一样的过程啊,那在现在是不是看这个呢。嗯。好,来到这儿,你看它是不是有,他怎么写的,加了个锁,哎,这无所谓,如果关闭了就打那个日志返回,好,那不管再往后看。
14:03
嗯,是不是应该在这里啊。其他没了吧,对吧,这是处理什么异常啊。那在这里面。加了个锁return什么,这是一个方法,这是一个方法啊,你看他名字有多长。啊,看都不想看对吧,但其实你读一下就很简单了,验证。Job的调度状态和启动job manager对吧?点。然后呢,再往里看。获取状态啊,这个无所谓啊,获取状态,然后呢,它根据这个状态是不是执行不同的逻辑啊IFS啊,这里是不是获取到了一个状态啊,对吧?Status,然后这个,那这个状态如果是。但是什么意思啊。已完成嘛,对不对,你可以点进去瞅一瞅,它就是一个枚举,对吧,枚举。
15:04
啊,那咱们现在是不是还没完成啊,那是不是应该走这啊。你看start。Job master,你看它一个启动要层层的判断封装啊,这才是真正的启动,好吧啊,注释不写了,很直白,再往里点还没完,同学们,你以为完了吗?你想的太年轻了,对吧?哎,往里点啊,这边是打印日志啊,不用看啊,那这边呢,是设置一个ID啊等等对吧,做一个设置而已啊无所谓。那么往后。大家现在熟悉套路了,应该就知道要看哪一行吧?哎,对,没错,是不是在这儿把它start起来了啊。好点。那start再点进去,你看现在他改名字的叫什么。
16:00
Job master是吧?那么早实现CTRL加H,你会发现就有一个类叫做job master啊。对吧,这个我感觉这一块他设计的还是比较混乱的,那么如果同学后面更熟悉一点,可以去给他做一些改造,对吧?来提交一下源码啊。那么你看这个start里面再套一层start,但这个不不是做什么事,它是确保你看它的翻译啊,我给大家翻译一下啊。确保我们的RPC服务是启动的,还有异步调用是可用的,说白了就是说,呃,就像你开车啊,或者说你关门,你有时候门一关。然后下楼了,走一半,我到底关了没有,你是不是回头再上去看一眼,再关一下对吧?啊,就类似这个这这个作用啊,这个就类似这个作用,那它其实呃,真正的其他启动逻辑在哪呢。
17:03
它是什么call是不是呃调用啊。这个是啥意思啊?异步的对吧,Without没有。Fence什么意思啊,阻塞啊阻塞。围墙嘛,堵住嘛,哎,说白了这个就是什么呢?啊,给大家标一下啊,这个涉及到一些专业术语,就啊其实也就那样啊,异步不阻塞啊,调用就这个意思啊,异步的不阻塞的调用啊。那调用里面这里。诶,那说起这个什么叫异步啊,同学们。啊啊,有的同学说的对啊,那不用等待他执行完对吧。那什么叫同步啊?
18:00
是不是要等待,等他执行,我告诉你,你才能接着执行啊,啊如果用咱们用两个例子怎么接啊。什么叫同步啊,啊,很简单,400米接力知道吧。接力赛啊,你第二棒是不是得等第一棒跑完交棒给你,你才能跑啊,这像不像一个等待阻塞的过程啊?同步的是什么啊,就是顺序一个一个来叫同步对吧?啊,这才是同步的,按照顺序,那什么叫异步的呀?异步就是说互相之间互不干涉,互不干扰,就像什么。400米跑啊,就纯粹的400米比赛,那这个400米比赛是不是有多个跑道啊,那是一个跑道一名选手啊,那是每名选手裁判开枪开始之后是不是各跑各的,对吧?你总不可能说前面那个人跑太快,你等一下等等等后面那几个人吧,那不可能对不对,你各跑各的啊,各跑各的啊,简单理解是这样啊,这只是一个简单的理解,好吧啊。
19:04
好,呃,啰嗦那么多来,我们要好好来启动启动它,对吧?来接下来是不看这个。啊。啊,还我们就追一个体重,追了十几分钟还没追到它真正的逻辑啊是吧。那终于进来了。那这边呢,啊,基本上也就差不多了,这边是做一些验证是否在主线程啊,这跟它的设计有关啊,跟他设计有关,呃,那这一块呢,是做一些。呃,打印啊,返回啊消状态。那这个。呃,是他设计的,呃,一个阻塞,非阻塞的一些,呃令牌相关的东西,咱们不用关心,咱们关心哪一个,这这一行。你看。哎,这个注释我都写的不想写了,每次都一直在启动,结果没真正启动对吧?啊,这里就是真正的启动叫master服务啊。
20:05
真正啊,真正启动叫马斯特服务。你看我们执行完这个方法,它打印什么study对吧?呃,Job master ID对吧?啊,这个才是真正的开始起了,开始起了哈,套了好多层,好,这是第一个核心的逻辑,第二个核心逻辑。咱们第三块会讲到这儿。什么重置and?启动什么东西啊,调度器啊调度器。咱们先把它标上啊。那这一块咱们就呃,看到这知道它会有调度相关的就行了,那么我们现在瞅一瞅,这里面有什么特殊的啊,其实没什么特殊的好吧,再追的话。嗯。
21:01
我看要不要接着追啊。啊,我我我们先到停到这里一会儿再继续看好吧。我们现在知道它是不是启动了master是吧?啊,知道这就行了。
我来说两句