00:00
现在咱们走到了这个叫做啊啊cross green的ex back end,这个里面呢,叫做雅恩的初力度的ex的back,这个back end呢,我们给大家稍微的说一下,这个概念当中我们这个复制。复制呢拿过来,那么把这个back我们放到这边啊。呃,这个back什么意思呢?我们一般称之为叫后台啊,咱们叫称之为叫后台啊,前端后台嘛,对吧?概念啊好,那我们回过头来,咱们接着看啊,那么走到main方法,Main方法当中啊,大家会发现它里面会有一个这个东西叫做wrong,这个run呢,会把咱们的这个create它创建,以及咱们这个backan的这个参数,它都会给他拿过来啊,咱们接着点这个叫做wrong点。点这个run以后,首先咱们往下来看啊,它里面开始运行,运行的时候呢,有一个叫做feer,这个feer呢是找到那个driver啊,找到那个driver,然后呢,在我们再接着往下,它是把driver可以找到,那就意味着我们在当前里面呀,咱们回来,咱们这里面呢,这个back end呢,跟driver有一定的关系啊,所以咱们拷贝,嗯拷贝放过来啊,咱们放过来这个呢,我们就叫driver吧,好不好,哎,咱们就叫driver啊,意味着它可以跟driver做一个连接呀,好啊,然后呢,我们接着呢,咱们来往下啊,往下往下以后往下走,往下走,往下走呢,有一个叫Spark,因为它会创建一个我们的运行时的环境,这个呢,我们也给它啊写上来啊,先来,但是我这里的颜色我需要稍微的换一换啊,咱们叫execcuor的in v啊,放过来。
01:42
好了,然后呢,我们继续啊,接着往下,下面呢,就有一个因为的环境有个叫setup end point,这个end point呢,在咱们这儿也要稍微的把概念呢给大家写一写啊,因为它里面设的概念比较多,咱们碰见一个呢,咱们就基本上就说一个这个呢我们写上啊,咱们叫做a endpoint,咱们叫做终端。
02:03
啊,咱们叫做终端,呃,如果你把它连在一块儿的话,大家看啊,这个叫做setup终端,那么这个叫RPC,因为叫通信环境,它等同于在整个通信的环境当中增加一个或者说安装一个通信的终端,哎,是这样的,这个时候有一个叫execcuor,这个execor,这是我们碰见的,咱们之前还记得吗?咱们之前的那个driver,它是一个线程,还记得吗?诶,它是一个我们的啊,哎,怎么它翻过来它是一个我们的线程,而我们现在有一个通信的终端,这个通信的终端我们叫做execu,那么这个ECU是什么呢?诶,大家看一下,它里面就有个back end,有个create,我们点,点完以后呢,这个其实咱们看看啊,它应该来自于我们上面的所后退。后退以后应该来自于我们的create,就是它,他把当前的对象给他拗了一遍,这个用来做什么呢?我们的终端,所以我们点进去,点进去以后的它就是我们在刚才的这个地方所创建出来的,你们看就是它,所以啊把创建出来的对象给它设定为终端,所以啊咱们现在画图的时候,这个地方咱们就可以把它理解为叫做executor。
03:25
所以这个叫做execu,它这个东西称之为什么呢?咱们叫driver对不对,这个呢,我们也给它再加一点东西啊,咱们的driver,诶有点太高了,嗯,给它减一个啊。减一个。好啊,然后这个呢,我们也稍微的往下走一个啊来走一个。咱们再往下再走一个啊。好啊,这样的话会好看一些啊,这个叫ex啊,好,那么我们回过头继续往下。那么你的这个地方呢,有个叫setup and point,所我们点点完以后,这地方呢,它是一个抽象的,那你想想吧,我们在运行的时候怎么可能是抽象的呢,所以拷贝,然后呢,在这里呢,我们net rpcv,我们打开,打开以后放过来啊,咱们在这里给它放过来,有一个叫dispa,有个叫resist rpc endpoint的注册RPC的通信终端,然后这是那个对象,这是那个名称,这个名称就叫excuor,对吧,OK,我们点它。
04:26
点它以后,这个时候大家会以发现在它里面会有两个东西,一个叫rpcpoint地址,就是通信的地址,这个叫re,叫reference,叫做通信的引用,这个咱们后面讲通信都会涉及得到,咱们后面再说啊,咱们接着呢,往下往下往下下面呢,会有一个叫做什么呢?叫message loop啊,有这么一个消息的一个循环器啊,然后呢,它这个地方会匹配一下,匹配以后如果匹配成功的话,那么它这里面会扭出来一个message loop,我们点一下点。
05:00
点完以后大家会发现在这个里面会有一个什么线程词,以及叫in box,所以啊,咱们这里呢,再来拷贝,拷贝以后放到这里啊,放过来这个东西我们写上就是它,嗯,放过来啊,放到这边。好了,放过来以后,它里面就有个叫in box和这个叫threat to,叫线程词啊线程词,那么我们这里呢,就来一个吧,我觉得这个咱们可以拷贝啊,这个其实倒不是那么重要,但是我们可以把它拿过来,咱们叫做in box,嗯,咱们叫in box好了,然后呢,这个地方我们给它来缩小一下,太大了,哎,缩小一下,然后颜色呢,给它稍微的变一变吧。变成这个颜色是不是好一些呢?啊好了,那我们现在呢,有这么一个东西,然后呢,这个呢,给它换一个颜色啊,换一个颜色就是这样啊好,那这个呢,我们也往上稍微挪一挪吧,稍微的挪一挪。好可以啊,行,咱们这里呢,再来,咱们接着呢,往下啊往下好像下面呢就没有了,不过呢,这个引boss呢,我们点一下,点点完以后,这个叫收件箱,里面有个叫message,然后呢有个叫link的list,然后呢,它下面呢,有个什么东西呢?叫on start,这句话是什么意思呢?给大家解释一下它表述的含义,就是说我们当前的这个节点呀,它里面会有个收件箱,这个收件箱呢,干嘛呢,它可以往里面发消息,这个消息就叫unsar。
06:30
那么这个star发给谁呀?他发给自己。他要发给自己,告诉自己要做一件事情,叫onsar,那这个怎么理解呢?咱们后退,后退以后大家还记得吗?咱们这边是有这么一个对象的,这个就是通信的一个终端,用来做通信的,那么你用来做通信的话,这个通信的环境当中啊,它会有一个生命周期,大家看在这儿。这地方就有个生命周期,这个生命周期就表述的什么含义呢?表述的是有个叫创建构造器嘛,这个叫unsar,这个叫receive,这个叫onsto,所以呀,咱们刚才不是有个叫onsar们还记得吗?哎,咱们刚才有个叫onsar,那现在呢,它就会onsar启动,那么我们回过头来看,这咱们当前的这个对象,就意味着是我当前的它,哎,当前的它,它其实就是一个我们的endpoint,它就应该遵循我们的生命周期,就意味着当你把那个收件箱放了一个叫on start之后,那么我们的这块呢,就应该能够收到消息,他能收到消息的话,他这边就会有一个什么东西呢?诶,叫onsar。
07:42
所以啊,它的ons start就可以执行,执行以后咱们往下看,往下以后咱们看他这个地方干嘛呢?他去得到了咱们driver,得到了咱们的driver,你看driver拿到了,拿到了以后他就通过这个driver ask发了个请求。
08:01
啊,这个ask呢,就是问嘛,有问有答嘛,这个问就是发请求的意思,他向driver发了一个请求,所以啊,我觉得咱们这块呢,是不是应该那这样吧,咱们在这里呢,来一个箭头啊,来个箭头,咱们的driver啊,就这个东西,它像咱们连接的这个driver啊,诶发了点东西过去啊来哎,我们写上第七步,嗯,第七步,第七步他就发了一个消息过去,发了一个什么消息呢?大家看一下,叫做resist exor,注册我当前的执行器。所以啊,第七步它叫注册,嗯。咱们叫注册executor,哎,就是这个意思啊,好了,这是我们的第七步啊。呃,这个是不是可以往上挪一下呢?啊来放到这儿啊,这是我们的第七步,那么好,那么你的第七步是要去注册去,那你想想,那咱们是不是在专门那边应该能够收到啊,所以咱们driver这边应该想办法收到,那driver里面它这个现成的谁收啊,肯定是他的环境对象收嘛,所以呢,我们这里呢,来啊,咱们找一下叫Spark contest。
09:08
好,咱们找到它,找到它以后啊,咱们同学们,咱们往下找啊,往下找这个我们后面会给大家再去讲的,咱们现在先看看它里面有一大堆的属性,其中有一个这个东西叫schedule back end,这个顾名思义就是一个后台叫通信后台,他这个正好呢,跟咱们这边的后台呢,做一个什么对接啊,后台通信嘛啊,你给我传东西,我给你传东西,所以靠的就是它。那么所以我们点一下,点完以后我们来找一下,这里面有local模式的和集群模式的,所以咱们肯定是看它嘛,所以咱们打开,打开以后它就是一个通信的终端,所以它里面一定会有那些消息,大家看一下,咱们找一下来有个叫unsar,还有叫receive,你有问有答,那么我们有问的情况下,我是不是应该给你回复啊,所以呢,咱们往下看啊来。
10:04
往下看,有个叫receive and reply。这叫接收和回复吧,诶你看这这边就有一个叫registersist ex,所以啊,在这个位置就把它收到了啊把咱们的消息就收到了,那么你收到了以后,大家看一下你这边发了一个消息。发了一个消息,在我刚才的这个地方就收到这个消息,对不对,那好,收到消息以后,他会在当前的环境下,把它的一些参数呢,给他做增加,你看比方说总的核数啊,包括它的注册的这个数量啊,他都会去做增加,对不对,那么增加完成以后,最后的时候大家看他在干什么,来,他在这个地方回复了一个true,叫response吗?叫响应吗?告诉你成功了,你不是要注册ex吗?OK,我告诉你成功了,那么如果成功的情况下,那么这个时候干嘛呢?他就给自己发了条消息,告诉你我当前已经注册完毕,你看就是这样的啊,所以我们这个地方就等同于啊,咱们的driver呢,告诉我们这边啊来。
11:12
告诉我们这边哎,放过来啊,这个我觉得是不是太长了呀,我把这个改一改啊,咱们叫做把这个去掉,那叫message loop啊把它放过来,嗯,好,然后呢,这个地方诶我觉得。嗯,这个有点太什么了,因为我要写点文字啊,咱们写上它吧,嗯,写上一个第八步啊,第八步,第八步啊,咱们叫注册成功吧,咱们就叫注册成功,咱们叫注册成功啊好了,注册成功就这么写,我觉得就可以了啊好,那我们回过头来,同学们,那么你注册成功以后,他自己给自己发消息,那这个消息就会被他接收到,接收到的时候,咱们往下有个叫做receive方法啊,咱们找一下,嗯,在这儿呢,叫receive,他就给自己发了条消息,叫做注册成功,注册成功以后怎么了,同学们看。
12:01
是不是有一个叫executor啊,这个时候才是我们真正的executor啊,同学们,前面那个其实是用来做通信的,大家看咱们这个叫execu的back end其实是用来做通信的,我现在的接下来的这个,那它才尤其重要啊,啊,他是是真正的什么。它是,诶这个就这样吧,把这个往这边拉一下,好把这个呢去掉,我们写上它叫做什么呢?叫做executor。好啊同学看,关键点来了,这里我们写上一个红色,刚才咱们这个黄色叫做driver,它是个线程,这个叫exor,它是一个咱们的计算对象,那么我们的两大核心组件就已经看见了啊好,那现在呢,就把它创建出来,那创建出来以后大家想到这边呢,就可以发送什么呢?我们叫lunch的exor,所以我们拷贝,拷贝以后我们回到这边,咱们搜索一下,不对,应该在这边啊,来搜索一下,搜索以后大家可以看到,现在它这边呢,就是启动我们的equor已经完成了。
13:10
完成了以后来增加它的盒数,然后做一些我们的操作,就是这个意思啊,咱们点一下,点完以后,它这里边看看有没有一些任务之类的,这个咱们后面再讲啊,来咱们放到这儿,所以呢,现在整个环境其实就OK了,那么注册成功以后,它第九步是比较关键的第九步,第九步是什么呢?是创建计算对象啊,所以来它就是由当前的这个executor自己来调度,自己一下了,就是自己呢,我就告诉你一声啊,干嘛呢,我告诉你我要创建了,所以来。把这个放过来,这是我们的第九步啊,第九步。咱们叫做创建啊,我们的exor,咱们叫计算对象,好了,同学们,那么到了这一步的话,我们的整个环境就是OK的,那为什么呢?Driver有了,Ex有了resource manager就有了,Not the money不也有了吗?那剩下的不就是你来完成你的那些呃,作业的操作啦,包括阶段的划分,任务的切分,包括任务的调度和执行,不就是你来做了吗?对不对?所以到这一步环境上应该是OK的啊好,那么这个咱们说完以后,咱们回去啊,回去回到哪呢?回到那个叫application,咱们master手里啊。
14:25
大家还记得吗?我们在这里面咱们找一下啊,来咱们找一下有一个咱们叫做run啊,咱们的driver在run driver的时候,大家看一下啊,咱们这边是不是sa,然后呢,我们这边是am,然后呢是创建分配吧,当我们这些都完成以后,记住其实后面还有步骤干嘛呢?让driver继续执行,就意味着我们刚才给大家画的图啊,其实是按照一条线往下走的,什么呢?就是申请资源。大家记住啊,两条线,一条线呢是来创建我们的这些节点,另外一条线呢是申请资源,还有一条就是两条线是不一样的,一个是跟资源相关,一个跟计算相关,而这个计算就是在我们这儿了啊,干嘛呢?让我的driver继续执行,这个driver不就是我们的线程嘛,那咱们线程继续执行的话,不就是让我们的word count继续往下走吗?诶让它继续往下走,那这个代码在什么位置呢?其实给大家可以找找啊,就是我们点一下记住在我们的初始化的时候啊,这里我们可以搜索一下,它有个叫post内在这。
15:33
在我们的608行的位置上,它其实有一个叫post start hook啊,就是说我们告诉你,我准备工作已经准备好了,所以我点点完以后,我们搜索一下来,我们在这里去找到它啊,打开。打开以后呢,我们来拷贝,拷贝以后放过来大家看一下,在这一步当中,首先它就把我们当前的环境初始化已经完成了这一步,记住了这一步就能够让咱们刚才的这个程序继续往下执行,就可以做到,然后呢,这一步完成以后,有个叫做super,咱们点一下,点完以后再点。
16:10
这里面就会有一个while死循环啊,也不叫死循环了,它会有一个状态的等待,它的等待我们的程序继续往下走,那么在当前的这个位置,咱们有一个叫resume啊driver,这个driver呢,就给他通知,通知以后他就可以继续往下走了,点一下对吧?哎,就是这样,所以在这种情况下,对于我们来讲,现在我们就可以让driver程序继续往下,那么driver程序继续往下的话,就意味着后面的这些逻辑就可以开始执行,他可以开始执行的话,包括我们读取文件呀,扁平化呀,包括分组啊,包括我们的这个任务的执行啊,全都属于后续操作。所以啊,两条线是非常准确的,一个跟资源相关,把driver一个Q准备好,另外一条线呢,是执行咱们的业务逻辑啊,然后呢,让整个作业执行,那这样的话就可以了啊好吧,同学们,那么所以走到这儿以后啊,咱们整个的一个提交的流程,以及咱们的环境就准备好了啊,我画的这个图把每一步呢给他诶都写上了,可能这个颜色有点乱啊,但是希望大家能够稍微的明白一下啊,就是可能确实有点乱啊,这个颜色也没画好,没关系,同学们呢,稍微的分析一下,反正文字上都有描述嘛。
我来说两句