00:00
到了这一步,同学们能不能跟上,能不能跟上,我们刚才已经看到了咱们这个driver的啊,其实通过这个图你会发现driver是一个线程啊,同学们,所以我这里呢,其实来咱们写上放到这儿啊,来咱们说一下这个黄色的呢,它表示一个线程啊,来咱们表示一个线程。好了,咱们表示一个线程,那我想想啊,咱们这个绿色呢,Obli matter是一个进程。所以啊,咱们放到这里啊,来,咱们把这个去掉,咱们写上啊,它是一个进程。啊,咱们来说一下啊,它是一个进程,这个其实如果你要在执行过程当中,你是可以看到的啊,黄色是一个线程,这个绿色呢是一个进程,好吧。那来我们继续了,因为我们刚才说过了,现在线程已经有了,是我们的driver线程,而且咱们那个上下文的环境对象已经初始化成功了,对吧?那接下来咱们就往下来他说了,如果上下文的环境它不为空,那你不为空的话,这边会有一个叫sc.EV叫环境,有一个叫RPCV,这个呢我们得给大家说一下,因为这里涉及到一些概念,所以来咱们放到这边,咱们写上叫做概念啊。
01:21
那么这个概念当中,其中咱们把这个文字呢,咱们拿过来,诶放到这边啊,咱们有一个叫RPC,然后叫en nv,这个RPC呢,其实我们可以简单的理解为叫通信啊,因为叫环境,我们就称之为叫通信环境就可以了啊就有这么个概念,这个咱们后面呢,会给大家讲一下,咱们这里碰见了,咱们就说一下来,咱们接着往下。下面呢,有一个叫register的am注册am这个是什么意思呢?其实啊是这样的,当你把咱们的OB master创建好之后,那么我们首先大家想想,你是不是得申请资源呢?咱们当前的雅安集群当中有哪些资源能让你用,你是不得想办法得到,所以啊,那么你的OB master就得想办法跟resource manager做交互了,对不对,那这个交互啊,肯定就得用到这个底层的client对不对?所以呢,我们这里来啊,咱们写上第四步啊,第四步。
02:21
这个第四步是什么呢?其实啊,它就是注册的意思啊,来咱们叫注册我们的am,咱们在源码当中,咱们这里面不就是有吗?它的这个代码就叫做注册am嘛,对不对,就是这个意思,但是你注册的目的是什么呢?其实说的简单点,就是要跟我们的做一个连接,然后呢去申请资源啊,所以呢,我们这里可以写上咱们叫注册am,咱们叫做申请资源,看看我们有哪些资源可以让咱们使用,就是这个意思啊。好了,那我现在呢,写到这儿以后,咱们回过头来,咱们继续往下看,下面有个叫create,一个叫做嗯,分配器啊,咱们点。
03:04
点完以后呢,往下走,往下走它这里面呢,咱们往下走,这里面就通过一个客户端,这个客户端就是我们刚才看到的它,然后呢,它就会create啊,创建一个分配器,这个分配器其实就是从雅安这边来获取它,然后呢,它这边大家可以看到它可以得到一个什么东西呢?叫做resources,就是我们可分配的资源。它可以通过我们的分配器得到可分配的资源,这就意味着咱们的雅恩需要把哪些资源能让你用,给你返回回去,给你返回回去以后,那这个时候我们再决定该如何去用这些资源,对不对?所以啊,咱们现在第四步是注册am,然后呢申请资源,那么我下一步不就应该往回返了吗?所以同看我的下一步在这个位置就往回返啊,来,咱们写上第五步,其实啊,这是一个连续的步骤啊,咱们写上第五步,第五步是干嘛呢?就叫做返回啊,咱们叫返回资源可用列表,把这个资源的可用列表呢,给它来返回啊,就是这么个意思,好,这是我们的第五步啊,那么第五步的话,那么我们继续来点一下,点点完以后大家会发现它里面呢,就去采集到我们的什么这些信息,然后呢,有一个叫做可分配的容器。
04:27
其实啊,我们现在的资源就是以container的方式提供给我们,对不对,所以他就拿到这个可分配的容器,如果可分配的容器的大小它大于零。它大于零,那就可以进行分配了嘛,对不对,如果你说了我没有可分配的资源给你,那我就没有办法了,但是如果我现在要是有可分配的容器怎么办?那我现在就要handle就要处理了。我要处理那些可分配的容器啊,所以来咱们放到这边啊,放这边这什么意思呢?我们就给大家写上来,写上咱们叫做处理,来咱们叫处理可用于啊,可用于分配啊的容器啊的容器,这个容器呢,就是我们的container就这个东西了啊好,那我们现在呢,就发现了,我们这就拿到了咱们的可分配的一个列表了,那么现在我们就点一下,记住啊,这个地方就是我们可分配的容器,我们OK去点一下点。
05:23
点完以后,它这里面呢,就把我们可分配的这个容器啊,做了一个分类,什么意思呢?因为比方说我现在需要20个,那这20个容器之间是什么关系,他得把它整理一下,比方说他们是不是在同一台主机上啊,为什么呢?因为container嘛,它是容器,这个可能是会在同一个节点上面,对不对,什么意思啊,这里我们给大家稍微的描述一下这个概念啊,咱们来。呃,比方说我现在呢,把这个放过来,把这个放过来,把这个放过来对不对,诶这个呢,我们用一个颜色吧,嗯,咱们点一下点一下,呃,点完以后我们放过来啊,放过来以后,那这个时候咱们再来拷贝啊,比方说咱们别别说太多了,给个十个容器吧,啊比方说给十个容器,那这十个容器container你怎么知道哪些容器在一块儿呢?比方说咱们现在呢,有一个我们这边啊,把这个三线删除了啊,删除了以后,我在这边咱们加上一个东西啊放过来,嗯。
06:22
咱们叫做node啊,咱们的manager啊,咱们的manager好了,那你就有可能啊,咱们的这几个容器干嘛呢?在这个里面啊,咱们在这个里面有没有可能有吧,还有没有可能我们的另外的一个node manager,诶我们在这个上面对不对,所以把这个拿过来,给它放到这里来啊,然后呢,我们这三个干嘛呢?可能在另外一个节点上,所以拷贝诶放过来啊,OK,把这三个呢,给它放到这边,OK,放过来啊。那么他们三个又有什么区别呢?区别就在于我们的node manager,就这两个东西啊,它在一个机架上面。啊,所以同同看啊,来拷贝拷贝以后放过来,然后把这两个至于底层,然后颜色给它稍微的标识一下,嗯,好了,这个呢,咱们可以稍微的再挪动一下,这个呢,我们写上咱们叫做RA。
07:13
好,把这个呢拿过来,这是我们的基架是吧?诶这是基架,然后呢,这个是我们的node manager啊,咱们这里呢,给一个绿色的吧,诶就是这个意思,所以啊,咱们现在总共有十个咱们的容器,但是呢,我们这三个,比方说咱们举个例子啊,咱们的这个写上一,然后呢写上一个二,然后写上一个我们的三,这三个我们的container在同一个节点上面,而我们的这个四呀,咱们的五啊,诶咱们的这个六啊,咱们的六,然后这边呢,诶写成一个六啊写成一个六,然后写成一个七,对吧,他们是在这个上面,然后呢,这个呢是我们的八,然后这个呢是我们的九啊然后呢,这个呢是我们的十,嗯。所以啊,大家有没有发现就是他们会不一样,他们不在同一个节点上面,所以我们要把它归类一下,那么归类以后呢,它这边就会什么呢?根据我们的主机host呀,还有根据我们后面的一些RA之类的东西啊,包括一些我们的RA把它做一个分类啊,这个分类呢,是在我们后面呢,有个选择,大家还记得吗?在咱们之前学习当中有一个属性,或者说有一个主要的property,咱们称之为叫首选位置吧,对吧,那叫首选位置,那么就意味着你的那个执行的task,我是发给一好呢,还是发给九好呢,对不对,你这个container都可以执行计算嘛,那么我们这个一是给他还是给九呢?哎,就要看实际的情况了,对不对?所以啊,这个咱们后面再给大家讲啊,现在有一个印象就可以了。
08:44
来咱们继续啊,来继续,这个地方在干嘛呢?就在处理咱们可分配的容器,然后呢,我们接着往下,当你分配好完成之后,下面就有一个叫做run,叫运行拷贝。拷贝之后,在我们的这个地方,咱们就可以往下了啊,往下咱们叫做wrong,这个顾名思义啊,咱们叫做运行啊运行这个运行呢,就是把那些已经分配好的容器啊给它开始运行了,所以运行咱们叫做什么呢?已分配啊,已分配我们的容器。
09:17
那好了,那我们现在呢,就准备的继续往下看一看了啊同学们来,那我现在呢,就点它一下点点完以后他就看看能够使用的容器,挨个变历,比方说我有十个可以使用的对不对,那这个容器呢,就挨个便利了,挨个变历以后往下走,往下走看关键性的代码在这个位置。它会判断咱们现在需要多少个executor,叫做target number executors和正在运行的exor的大小,诶看看是不是小于,如果小于的话,说明我们当前的资源还没有满足,对不对,怎么办?诶,它这里面呢,就会启动containers,说白了就是把那个容器让它启动起来,那么你让它启动的话,它这里是用了一个现成的方式,就意味着在咱们当前的OB master当中,它这边会有一个线程池呀,所以我回来,同学们回到咱们这边啊,回到点开,点开这边我拉大一些,拉大一些,然后把这个拷贝。
10:18
烤贝以后我放到这边给他一个我们的糖啊,诶或换一个颜色吧,嗯,能不能给一个粉色呢?嗯,粉色,那这个粉色是什么呢?其实就是一个later po啊,其实就是一个线程词啊,所以我们拷贝啊,拷贝以后,诶我叫做thread pool,会不会更好一些呢?咱们叫thread pool啊,就是它。这个线程词在干什么?这个线程词就在启动executor,哎,你同学们有发有没有发现咱们另外的一个概念就出来了,叫executor,它会把一些相关的配置参数给它传进去,然后有一个叫做wrong。叫运行啊,所以我们点一下点点完以后,大家会发现在这个里面会有一个叫做nm client,所以啊,在咱们这个线程池当中啊,线程池当中它有一个对象,这个对象中有一个属性啊,咱们来拷贝。
11:12
咱们在这里呢,放过来,它里面也有一个对象,这个对象的名字咱们看看啊,在这叫exable。就是它了,那么这个run ne当中啊,它里面啊,咱们看看拉长一些啊,拉长一些这个太多了,可能画不过来,那咱就不画了吧,同学们咱就不画了啊,为什么呢?因为它里面会有一个叫做nm client对不对,哎,有一个他啊,那这个顾名思义叫node manager嘛,所以说当我运行的时候,它里面就创建了我们的NM的client。那么这个nm client就意味着我要创建跟某一个node manager的关联,那比方说我就找到这个节点了,对吧?那么你这个节点的话,他就说了要初始化并且建立连接,然后启动container,要启动这个容器了。
12:01
那么你启动容器的话,是不是就意味着在我们里面就应该有一个我们的container被启动了呢?是不是?哎,就是这样啊,我们再去点,点完以后咱们往下看一看啊,往下看一看,往下看一看,它这里面就有个叫做no manager client.start container,哎,就是让某一个node manager来启动容器,它启动容器它的目的是什么呢?其实很简单,它会把咱们的环境信息给它传过去,这个环境信息当中包含了什么东西,叫command,这个command有一个叫prepare command拷贝。拷贝以后放过来啊,咱们叫做什么呢?叫做协商,叫准备指令,嗯,咱们叫准备指令。这个指令的目的是为了干嘛呀,很简单,它就是我们的这个地方拷贝啊,叫启动容器,所以呢,我们来写上啊,来降。像我们叫指定的NM啊,咱们叫启动啊,咱们叫启动咱们的容器对象啊容器吧,就这么写就可以了,那好,那我现在假设呢,就是找到这个node man让它启动容器,那么你让他启动容器的话,它会在容器里面执行你的脚本命令,那其实咱们回过头看一下,咱们这个里面的OB master其实也是在容器当中的,对不对,但是我们当前的这个node manager里面,它里面在干什么呢?我们去找一下,咱们看看是什么样的指令,咱们点。
13:28
点完以后啊,咱们看关键性的点啊,同学们,你看咱们的这个位置啊,咱们找一下在哪呢,在这。能不能看懂,是不是又来一个啊,这个东西咱们是不是又叫做b Java了,那么Java的后面有个什么东西啊,同学们来咱们往下找,有一个叫做它吧,拷贝拷贝以后,那在咱们的这个位置啊,放过来。你看看它有启动这样的一个进程啊,这个进程其实我们是能够看得到的,它就是那个executor的通信后台啊,是一个专门的进程啊,那所以它是一个进程的话,那在咱们图形当中,我们来给它拷贝。
14:13
拷贝以后咱们放到这个位置啊,放到这个位置,放到这个位置的话,咱们把里面的名字我改一改啊来拷贝,因为太长了啊,太长了也还好吧,嗯,放过来。所以大家可以看到咱们现在的这个地方呢,就是它就没问题了啊,那所以我们的这个箭头就来了,嗯,我们的这个它来放过来,放过来以后呢,我们写上它啊,咱们写上第六步。啊,第六步,呃,第六步是什么呢?第六步是启动啊,咱们启动咱们叫exor,哎,就是它了,好了啊,前面在咱们这边有一个什么我们的driver第三步,然后这边有个第六步启动EXQ,那行,那这个咱们说到这儿以后呢,还说啥呢,是不是他就可以直接看它了呀。
15:01
这个同学们,所以拷贝拷贝以后把咱们前面的全关掉,关掉以后咱们搜索一下放过来,放过来以后它里面一定会有闷方法,这是一定有的,所以大家可以看到就在这儿,它就是一个闷方法,那这个时候去找它就没有问题了啊好,这个咱们也先停一下。
我来说两句