00:00
接下来我们给大家说一下咱们的通信环境,这个通信环境呢,分成两部分啊,哪两部分呢?第一个是我们的driver的一个通信环境,所以我们再来写上咱们叫做driver,然后呢,把这个driver呢,我们给它放过来,还有一个呢,就叫做我们的executor了啊,咱们叫executor,那么我们的driver和excuor他们这两个通用环境我们怎么去理解呢?这个咱们首先看一看啊,看第一个driver。咱们这个driver呢,在哪里呢?它的这个通信环境呢,咱们来搜索一下,咱们叫做Spark contest,好在这里,在这里面呢,咱们往上啊,咱们找一找。咱们搜索一下吧,啊,它应该叫做env,还在这儿呢,大家看一下,有一个叫sparkv,叫环境对象,那么这个env呢,我们在后面呢,给他来,诶正好呢,它这边有一个叫create Spark env对吧,咱们这里呢,可以搜索一下在什么地方,大家可以看到在这个位置,在这个位置呢,它来创建Spark的环境,那么我们点它一下,点点完以后,它这里面就有一个叫create driver,因为就是你driver的一个,因为环境对吧,点点完以后在这个地方咱们往下走,往下走啊有一个叫create,叫创建我们点。
01:17
点完之后,它这里面判断是不是driver,然后接着往下往下往下往下有没有发现有一个叫RPC,因为点correct呀,它就得到了一个叫rpc in为的一个对象,所以我们点一下点点完之后这里面用的其实咱们点一下create,它这里面用的就是这个叫net rpcv,所以拷贝拷贝以后同学们看在这里呢,它就叫netpcv,那么然后呢,在它创建的过程当中,同学们往下看啊,它里面有这么一个过程干嘛呢?叫做u.start service on port。这句话是什么意思呢?是给你一个端口号,然后呢,在这个端口号上来启动服务,这个怎么就感觉跟咱们之前学的那个socket就很像,对不对,我们给他占着一个端口来提供服务,比方说四个九啊,四个八之类的,对不对?所以啊,在咱们当前的位置啊,咱们拿过来,拿过来以后,它里面就应该有一个service或叫server的概念,所以把这个呢,我们放到这儿啊,它会有一个server。
02:25
好,那么这个server呢,我们就放到这里,给它一个红色来表示一下啊,这个呢,我们去找一下同学们看,咱们点,点完以后往下走,往下走,往下走这边会有一个叫start service叫启动服务吧,好,看下面下面好像没什么东西了,我们就直接点它一下点嗯点诶,但是这个启动服务呢,同学看是传进来的,所以咱们后退。后退以后是第二个参数传进来就是它,那所以呢,这个参数在这个位置有一个叫net in.start server,叫启动服务点点完之后在这里面呢,就有一个叫create server,叫创建服务器,对不对,我们点一下点点完以后它有一个叫transport server,所以拷贝其实啊,在咱们这个地方啊。
03:15
它应该叫做什么呢?叫transport,我们的server就是它了啊,然后呢,我们点进去,点进去以后呢,往下看,往下看它的这个地方就在in net在做服务器的初始化,所以我们再来点。点完之后你会发现它里面就有IO模式,然后呢,在这里面会有一个叫new,咱们叫server boostrap,然后呢,有个什么channel,关键点在哪呢?在我们这个位置,这个位置有个叫get server channel class,我们点一下你会发现这边就有个什么东西啊,叫NIO,这边有一个叫E。还记得咱们前面讲的吗?我们的ni啊,在我们的Linux下面,它是采用e po的方式来模仿的AIO操作,因为我们的Linux对AIO是不支持的,所以它采用的其实啊就是我们的e po方式啊,所以来咱们这里说一下,就是我们的e po,但是我们这个倒也无所谓啊,因为它是可配的嘛,在咱们当前这个地方是可以配置的啊好,那么我们这里呢,后退啊,咱们这里后退,后退以后就意味着我们现在找到了咱们的一个服务器呀,好了,那现在这个环境有了以后,那然后我们还需要什么呢?大家看一下和这个东西叫rpc endpoint,叫注册我们的通信的终端。
04:35
那就意味着在咱们这个通信环境里面逛个服务器还不行,还得有一个通信的一个终端,所以这里给他一个我们的绿色啊,或者说蓝色都可以啊,无所谓,咱们这里呢,拿过来叫rpcpoint拷贝过来,拷贝过来以后我干什么呀,它起到了什么样的作用呢?它是用来做通信的,可是它的作用是什么不知道,所以我们点一下点。
05:01
点击我们就点它,点完它以后大家往下看,下面呢,有一个什么东西呢,叫receive,这个叫receive and reply啊然后呢,再往下好像你会发现呢,它是用来做接收数据用的,就这个东西啊,咱们可以把它写上啊,咱们叫做receive拷贝,拷贝以后呢,我写上一个它咱们写上一个星啊,写上一个星它就表示的是我来接收咱们的数据,哎,就是这个意思。好,那么有个叫endpoint了,其实还有另外一个东西啊,挨在这儿呢,叫endpoint,什么re,所以我们再点它,那这是什么东西啊,这个有个叫re,这个re呢叫reference,叫引用。所以呀,我把这个拷贝拷贝以后拿过来啊,咱们拿过来。把它放到我们这边啊,咱们这换成一个蓝色吧,咱们这个加上一个咱们叫做re,这个叫做引用,什么意思呢?你往下看,同学们往下面你会发现它有什么东西啊,叫散,叫发送,还有呢,叫ask,咱们这就写个ask吧,啊来。
06:09
好了,所以说大家会发现不一样,我们这个r pcn point呢,它的主要目的的通信呢,它是用来收数据,而这个rap呢是用来什么发数据,那么你收数据的话,这个时候就有一个地方咱们需要注意了什么呢?它有个收件箱的概念啊,你收数据就得有个收件箱。所以我们回过头来,咱们打开啊,咱们打开咱们叫executor,那个叫back end,咱们点一下,点点完以后呢,我们来给它找一下,有个叫need它啊咱们拷贝拷贝打开,打开以后搜索一下,搜索以后呢,会给这个endpoint,我们点点完之后这个endpoint它里面其实是有一个收件箱的概念,同学们看它会有一个收件箱的概念在这儿啊,所以这个我们就给它加上一个东西在这儿吧。
07:01
咱们在这里加上啊,咱们来,咱们写上叫做什么呢?叫做in box,叫做收件箱,哎,把这个放过来啊,啊用个紫色来表示吧,啊什么意思呢?就是我接收数据啊,我不管谁给我发的,我都会放在我们的收件箱当中啊,就跟发邮件一样,对吧,大家给我发邮件,我都放在一块儿,放个收件箱里面,按照顺序给它来读取就可以了,啊就这意思,而且它底层的这个位置,我们点一下,咱们的那个叫in box里面不是一个叫message,叫linked list吗?对不对,好,后退,后退以后,那我们这个地方呀,你的这个它里面咱们点一下,这个叫做PA,它是用来做调度的,这个调度当中啊,其实啊,我们可以去看一看,咱们点一下它里面呢,会有一些什么东西呢?咱们不看这啊,看这儿在当前的环境当中,我们找一下里面应该有一个,我确定一下,应该咱们搜索一下吧,应该叫做out a在这呢。叫做out boxes什么意思啊,叫做发件箱,我们在这个地方搜,那么我们就有发,对不对,那这个发件箱你会发现不是一个,他会根据地址呢,会有多个什么意思啊,举个例子啊,比方说张三李四往五都给我发消息了,那我要往回返消息的话,是不是应该给张三李四往五都发消息啊,所以每个我们的张三李四王五这三个用户呢,我们都会给他一个发件箱,所以他是跟地址绑定的,那所以呢,我们这里拷贝,拷贝以后放到这里叫auTo Boxes。
08:29
好了啊,这一个是收件箱,一个是发件箱,这个就是我们driver当中的一些通信的东西,那么我们现在呢,就得往excuor来看了,回头看我们的executor executor当中,你往前看,前面这个地方呢,其实就有一个咱们找找啊,哎,就在这儿啊,就在这儿这边有一个叫做ex,因为点点完以后我们再去点这个create,再往下,往下以后你会发现跟刚才大同小异啊,它里面也会有什么呢,我们的这个什么create啊之类东西,对不对,然后呢,往下啊,往下下面呢,也会有一些其他的一些方法啊,咱们可以看看什么driver啊,包括点这个点点完以后走到这边ninety,再去点create,跟刚才是不是完全一样啊,也是有个start serve吧。
09:18
所以说你会发现的,包括这个叫做什么star service on port,跟前面完全一样,对吗?所以啊,就等同于啊,就这一套东西啊,咱们其实全都有,所以呢,我们给它来复制一下,复制复制以后我放到咱们下面来,放到下面来。放到下面来以后,这个咱们叫in box,哎,这个叫out box,那好了干嘛呢,我把这两个调整一下位置。把它挪过来,诶把这个把它呢,往这边挪啊,然后呢。它诶往这儿挪,我为什么这么干呢?是因为呀,你这边的收不就意味着这边发吗?所以我的箭头啊,同学们看啊,箭头呢,应该指向咱们的这边,诶应该指向它,所以呢,反过来同样道理,那你这边是不是应该是发件箱指向这边呢?要给这边发嘛,诶就是这样,所以啊,咱们这个re就是向远程通信来进行发送,而我们的收件箱就是用来收取我们的消息,这就是他们一个最基本的通信原理,只不过呢,我们的每一个通信终端呢,什么有生命周期啊,什么receive呀这类东西,诶就有这样的一些操作了,那么具体发和收,那靠的就是我们底层的这个server,诶老师,那么有没有client呢?其实肯定有啊,咱们找一下咱们来。
10:37
嗯,咱们刚才这个disp我们在这边啊,嗯,也不是它在这里面吧,我们搜索一下那个叫来搜索out boxes啊auTo Box在这那这个地方呢,我们点一下点点完以后大家看怎么了。有个client叫客户端,你发件箱,你给谁发你不知道吗?那这里面其实就有client,这个client就叫transport client啊,所以呢,我们其实除了它以外,应该还有个东西就是客户端,它应该在哪呢?应该在咱们的这个,诶输入出出这个地方的啊,所以咱们写上咱们叫做client啊,咱们叫啊,而且可能还不是一个,可能是多个,所以呢,我复制一下,咱们复制把这个呢,我们两个啊,咱们给它用一个,嗯,粉色吧,诶诶不好看是吧,给一个黄色呢,哎,可以啊,然后呢,把这两个呢,再给它来复制,复制以后我们放到这个位置。
11:28
然后呢,把这些东西啊,给它稍微的往后挪一挪啊,把箭头往下来,往下来OK,往下来啊,那么大家可以看到我们这个transport client就应该跟server建立连接,然后呢,向他发出去,我们这个也是一样的吧,所以我们的箭头啊,咱们的箭头来指向这个位置,嗯,给他放过来啊。箭头来连接它,那同样道理呢,我们的这个呢,应该连接的是它画的可能不好看,反正这个意思大家能够明白就可以了啊。
12:01
好把箭头画上,然后把虚线给它连在一块儿就可以,好,然后呢,我们这个地方也给它复制一下。这是我们的发件箱的操作啊,那同样道理呢,这个呢,给他拿拿过来。拿过来以后,我是不是这样画可能更好一些呢?嗯,行吧,那就意思意思吧,啊,这个画的也不太好,好了,这就是一个最基本的一个通信的环境啊,就是你给我发,我给你发,然后呢,我放在我的收件箱里面,我发的时候我这边有一个发件箱,其实就够了,就跟咱们生活当中发邮件感觉非常的类似,这个咱们先把原理呢和源码的咱们先看到,看到以后我们后面再把那个我们的一些文字性的描述,咱们再过一下好不好,同学们。
我来说两句