00:00
好,接下来呢,我们来看一下,哎,Date node它启动的时候又做了哪些事儿,那以前呢,我们也讲过date note工作机制,那只不过呢,简单的嗯,讲的是一个入门哈,那么来回顾一下啊。看看是否还记得。呃,首先呢,这里面有name notde对吧,有data notde data notde,那data not里面存储的是原数据,哎,有这呃,存储的是数据啊数据有数据长度检验和时间戳,哎等等一些信息,那么它启动之后呢,首先要向name node进行一个注册,告诉name node我还活着对吧?哎,好,然后接下来诶内蒙诺呢,会给他一个回应说诶,你已经这个注册成功了。然后呢,诶这个以后呢,会他会周期性的向这个内幕note进行上报,那是上报的周期呢,是六个小时上报一次,同时他会每三秒汇报一下当前这个data note是否活着。诶,那这个呢,是三秒的一个心跳时间,那这个超时时间呢,咱们上个源码已经看到了,说十分钟加30秒,如果内note仍然没有收到date note心跳,那么他就挂掉。
01:03
对吧?哎,那这里面提到了一个注册一个事儿,还有一个是心跳啊这么几个事儿,那下面我们来看一下哈,我们真正看源码的时候。那这里面我们详细的讲会包含几件事呢?哎,首先呢,有一个初始化date叉service啊,还有呢是初始化attp,哎,就初始化date node,它也有对应的web页面。然后呢,是DN的RPC服务端进行初始化,因为data呢,它也是属于一个进程,对吧?啊,它也接受外面客户端对它一个访问,比如说你要进行上呃上传数据,上传数据这个客户端,它最终是需要把这个数据写入到DN的。那么他们两个之间,你要跟他进行通讯的,哎,所以说它也需要启动RPC对应的服务,那接下来就是最重要的一个是向内no的注册,还有一个呢,就是周期性的发送心跳信息。OK吧,哎,那这么几件事情,那我把这个呢截出来。
02:02
OK。往这一放,那下面同样道理,这里面仍然有data note的详细启动流程啊,你后面再开源码的时候啊,你防止报,你就可以看到这张图啊去做它,首先呢,我们从这个带动的开始,然后进入到它,没方法一点点往后走,走到这儿来进行初始化,初始化之后呢,创建实例,哎,你用这个电动对象,然后开始带动的启动。是吧,来启动,那真正启动的包这么几件事儿,第一件事儿呢,是初始化data叉serve,那这个后面我们再讲上传啊数据这个源码的时候,那会用到这个服务啊,现给大家埋一个伏笔哈,那接下来再往下呢,就是启动对应的HTTP服务,也就说电动的它也有对应的web页面,允许外部一个访问,那还有呢,初始化对应的它的服务端啊RBC,诶防这个允许客户端对它进行一个访问,那再有呢,就是他要主动的向。Name not进行汇报,那汇报这里面又涉及到了RPC的一个通讯,哎,所以说这个程序啊,RPC呢是非常重要的哈,你要不理解这个RPC,那你看源码根本就看不了啊,那这个呢,就是name note,那好,那这个RBC这边是接收对吧?嗯,接收这个data note发送过来的这个请求啊注册,那他这边呢,就会注册这个D已经生效,同时呢,哎,会管理对应的心跳相关的一些信息。
03:22
那这边呢,会有一个单独的。诶发送心跳信息三秒发送一次嘛,那发送呢,那这边就有接收,接收的是什么信息呢?哎,它其实接收了两个信息,一个呢是更新你的,呃,存储信息,还有一个呢,是上次发送的一个心跳信息,哎把这两个信息更新了。然后之后那这边呢,会有一个心跳相关的一个响应啊,这就是整个带诺的一个,呃,比较详细的一个流程,那下面呢,我们再给大家看一下这个对应的源码啊呃,开源码之前我就截个图吧。嗯,先把这块。嗯,这块有点多。嗯,先把这儿吧。
04:02
先接一块行吧。先接一块。哎,先把这块拿下来,比如说初始化他好吧。哎,一点点走啊。好,那这个整完之后,那下面我们来看一下啊,同样道理啊啊,我们要想看data node对应的源码,首先你这个客户端也得加上,要不然呢,你搜索不到啊,搜索不到。嗯,这是对的。写错了。啊,这种。啊,那我们搜索一下啊,处理一下。然后这里面CTRLN。Date。Not OK。那进来之后呢,首先仍然是查找它的对应的main方法。加个括号。搜索对吧?哎,来到这之后呢,很清楚啊,第一下肯定就是找它了,对吧?啊那就进来呗,点它,点它之后,然后你往下看,你看哪一个方法是我们需要点的,嗯,你看它呗,创建date note,那肯定就是它。
05:07
那往下走,那创建这note,那继续往下看。呃,创建带not的,那看这里面说初始化带not的,然后呢,初始化完这个DN之后,它就只进行了一个执行,对吧?哎,进行了执行,那其实详细的初始化是不是在这里面呢?那我们来进来看一下哈,那接下来看一下之后往下走。呃,往下走看,这里面有一个make instance,是不是就创建一个实例对象啊,啊,其实就是new了一个data not对象,那进来之后,那还是仍然来到最后一项代码叫new一个date node啊。那带到的,那这里面就是它真正的进行初始化要做哪些事情,那这个代码呢,写的其实不是特别好啊,这个太长了,每一个方法里面包含这个几百行代码,其实这个可以进行一个优化封装的。那往下看啊,看一下这里面有一个start date note对吧,那就真正开始进来。
06:06
进来之后往下走。找什么呢?找到这儿看。哎,这块呢,就是真正的对DN,哎全局的一个,呃初始化了,那首先第一个呢,叫in data叉service,哎进来这个服务呢,新债呢,嗯不给大家讲,因为大家呢对它很陌生,我们后面用到这个上传,呃讲上传源码的时候会大量使用它啊这个服务你记得我们在初始化DN的时候,把这个服务啊给开启了谁呢就成。你看这个服务是一个什么呢?是demon,它是一个线程。啊,开启了这么一个线程啊,行,你记住这个服务,有这个服务就行了,有一个印象,那接下来我们回过头来,回回到这儿,回到之后呢,下面呢,就是start in for server,那这时候啊,你还是,嗯,你前期啊,如果这个。对代码不是特别熟。你可以怎么办啊?就教你一招。这么处理?这样就好了,你像我要自己点我就比较熟了哈,那先你看进到这之后,那往里点呗,进来说我要开启一个外部服务啊,类似于什么呢?类似于刚才这个页面啊,这个data notde也有自己的这个专用的这个页面哈,嗯,只不过呢,这个咱用的人比较少啊好,那接下来接下来之后呢,继续往下看呗,说这里面有一个data notdetp server啊,那有没有啊。
07:20
That note a dp server,那就它呗,嗯,进去,那这是创建了一个a dp server哈,进进来之后继续往下看,你看。这里又了一个http server。那咱之前讲内no的时候也说过,因为hiop对这个ATP server呢进行了一个封装啊,产生了一个a gtp收to啊默认的GDK呢是有自己的哈,那既然呢,有了它之后呢,那它呢对后面进行了各种的一个呃服务端呃serve light一个绑定啊跟上一个是一样的哈,那这块呢,我们就不做过多说明了啊,看到它就可以了。呃,那再回来回。你要想看的话,这里面有个start啊,这个服务的一个start。
08:00
对吧,这里面是开启对应的这个APP server哈。嗯,这是开启行回来啊。回到这啊,回到这儿之后呢,我们接下来继续看下一块,下一块到哪了,下一块呢,就是诶判断这个启动一下这个RPC服务端。对吧,那启动你往下看,从这往下看,你看哪一个像。说初始化IC server那进去呗,嗯看一下,那看他怎么看它是不是一个服务端呢。咱们之前讲的过那个RBC这个服务端代码,那就是你有一个RBC。对吧,哎,你我知道这里面传入对应的服务器地址啊,端口号以及呃,这个主机名称就可以了呗,那那用是它吗?啊,所以说现在就创建了一个RP服务啊。OK,那服务端也开启,那接下来再往下走就到了这个咱们之前讲的说的比较重要的就是向。Name进行一个注册。
09:00
对吧,啊,就来到这儿了。那好,那注册的话,那我们回来,哎,哪块是注册呢?你看这是初始化IPC之后,那继续往下走呗,往下走你看哪一个项。说他要去进行一个注册,对吧,走到这儿。Refres name not什么意思?说这个刷写name node,其实这个名字起的不太好,其实应该resist这个name node是吧,或者resist date node啊,这种含义会好一些啊,那么来看往下看看怎么刷写的。啊,往下走,走到这之后,你看这里面提示你了,说这有一个他对不对,哎,那看有没有呢,找到这发现确实有一个他对吧?啊有了它之后呢,继续往下走,继续刷写那么no。嗯,刷写继续找,这之后呢,说有一个create bps有没有呢,往下这段代码特别长啊。啊还好啊还好找到这对吧,哎,找到这儿之后呢,你发现啊,确实有一个创建它,然后呢,啊,后面这有一个start。啊,这是new了一个服务类,是一个服务对象,因为你未来要跟谁进行通讯啊,你这个data note是不是要跟NN进行通讯,思考一下啊,我现在呢是DN要跟NN通信,那么大家NN有几个?
10:11
哎,大家思考一个问题啊,NN有几个现在啊,咱们现在讲到新,在目前NN呢,都有一个内noe,然后呢有ton对吧,后面呢,我会讲这个内蒙note高可用,以及联邦会有多个name note。那我这个DN要跟这个内蒙诺进行心跳的时候,每一个我是不是都要进行一个心跳。对吧,哎,所以说你看这块的代码啊,你看这块。这块代码呢是for循环便利,哎,所有的NS啊,然后添加,相当于是跟所有的name note进行一个啊通讯,那每一个name note你都要创建一个BPOS这么一个服务。哎,记住哈,这块是创建多个对象,然后最后呢,把你所有创建的这些服务,然后开启统一开启。OK吧,啊,这块注意一下,那行,那下面我们进去看一下,哎,请进到这,进到这儿之后呢,这创建了一个BP offer service,那继续进。
11:05
再往下走,下面呢,说这有一个这个地方啊b service对吧,BP service,然后用了一个BP service actor看到了吗。这块,哎,它其实在这里面就是创建了多个BP service offer,那他创建多少个,你有多少个name note,我就创建多少个。OK吧,好,那行,那我们回过头来,比如说这个服务对象我们已经有了,再退再退,退到这儿,你所有的这些服务创建完毕之后,我是不是得开启啊,所以说我要点击这个START2,就是这个位置。开始大号,那我先来一个注册。那近。对吧,哎,走到这我要准备进行注册,那注册的话,你看这里面是吧,有一个star的方法呀,那就开始呗,哎往下走。然后呢,继续start。对吧,来来到这,来到这之后你会发现这里有一个BP threat,然后start,其实这就是开启一个线程,然后用这个线程对每一个name node进行一个注册。
12:07
对吧,因为我多个name,所以说就得开启多个线程,OK,那我就start,你点start,你点start呢,发现这是一个threat,也就说这是哎这个最底层了,这不对,你得找它对应的啊,相当于是这个线程开始运行了,对吧,那开始运行start,那它真正的代码从哪开始运行啊,是不是从它的run方法开始运行了,这是大家有时候看源码啊,这个看蒙的时候一看到尽头了,没法点了,其实呢,你可以看这个线程对应的run方法,好,那你就直接搜索ctrl f run。哎,这才是程序真正的啊,执行代码,你这个线程开启了,开启之后他干了什么事,你看叫connect to n n and handle。是不是连接你这个NN呢?哎,那我把这个下面这个图给你截下来。这块啊。哎,你就拿着这张图一点点往后走。
13:01
就会非常清楚。OK。行,那这个呢,就是呃往下走了哈,现在呢,相当于我调用了这个方法对吧?哎,然后呢,哎准备开启,那它是不是真正的调用的是这个,呃N呢跟通讯,那我们得看一下往下走。往下走之后,你看一下第一行说get nn一个PSY啥意思啊,获取NN的一个代理。对不对,也就说我现在要是拿到一个客户端,那他怎么拿的呢?你看一下。然后说用了一个,他那再往下走。往下走啊,然后走到这说创建一个name node。终于来到这儿了。这个大家很熟悉吧,客户端代码是不是就直接RPC.get。对吧,哎,就能拿到我对应的一个代理对象,那好,那现在呢,就是已经拿到了是name no的一个代理对象,那我就可以用它跟name node进行一个通讯。那拿它之后,你看往下他是不是就去注册了,哎,这才是真正的哎注册方法好连麦。
14:07
点进来之后说这里面要注册,那你看他干什么事啊,他得拿到这是他刚才那个代理对象吗?代理对象是不是点了一个resist弄的啊对。就是他。那进来,进来之后你会发现,哎,仍然是ist they not。张,下周啊,这边没有了哈,同学来,那现在相当于是我调用的是ist date note,我date note已经发了。对吧,这块往内蒙诺的发,那现在我应应该去哪去看。对应的接收代码。大家思考一个问题,我DN拿到了NN的客户端代理。我要给谁发,给内蒙都发,那我是不是现在发的话,我得去哪找啊砍F。按CTRL,不是CCTRLN。Name。Note rpc server还记得这个类吗?对不对,也就是说name name name note开启了对应的服务客户端给我访问的话,是不是发到这里面,我发到这里面我它就一定有一个resist电not,你看果然找到了吗?
15:09
这不就是这个客户端和服务端的一个相关通讯吗?哎,所以说这个很重要哈,好,那进来之后,那接下来那往下走呗,你看他注册了什么信息,哎,那好继续注册吧,对吧,那继续点。嗯,点之后呢,说这里面要注册了一个带动的对吧?啊,那继续注册。嗯,注册datanode,然后再往下看。啊,这是呃,服务器地址啊,没问题,往下找呗,往下找这个代码比较多啊,往下找。他说注册的话,我得注册这个DN。往下看啊,这些代码非常多。往下。诶来到这个位置,你看啊,这个代码写的其实不是特别好啊,应该进行一个封装,那你看这里面就是诶I的date node,将你这个注册信息添加到了这里面,那是不是呢?你看一下啊,它首先它它怎么来的,它往上找。
16:02
往上涨啊涨。那这样吧。咱们刚才传进来的这个方法里面是不是带过来的这个这是不是带过来的D音传过来的信息啊,对吧,那你看这个DNA信息给谁了。往下找,往下找。跌,嗯,往下看啊。好,你看这块。我这个DN信息我是不是给传给他了,他用了一个这个data no的这个,嗯,描述对象是不是给了他,那好,那加下来给了他之后,你看他干嘛呢,他这个信息。跟谁绑上了,说注册了一个新的day notde,是不是就已经注册成功了,相当于说哎name node已经知道啊,有这么一个day node对象以后呢,我在用的时候呢,你就可以给他分配对应的任务,对吧?同时他还将这个datano的信息添加到了对应的心跳管理者。为啥添加到这儿啊,因为我知道有你这个DN了,那后续我进跟你进行心跳信息交互的时候,是不是得进行心跳啊,哎,得相互的发送信息,哎,所以说他就干了这么两件事啊。
17:06
注射就是干这事。哎,加入到我的电动的一个管理列表里面就完事了。那这一部分注册就到这儿,那注册完毕之后呢,你看下面还剩哪呢。那就上这块了。对吧,哎,你还得回到这个star的方法,对吧?对note star方法,那你往回退呗。回到回。继续回啊。对吧,又回到这儿了,这个呢,我们仍然回到了data no的这个star方法,那那刚才那里面除了有一个注册之外,还有一个发送心跳,那来看呗,看有没有进来之后仍然是找他start,嗯,这里面仍然是start start之后来到这这的话是不是找它的对应的run方法呀,哎,Ctrl f run run。你看多了代码,你就觉得就比较轻松了哈,你看刚才我们走的是不是他进行注册,那他注册成功之后,你看他往下走,这有一个。
18:07
哎,还有一个心跳信息的一个发送,我们来看呗。再往下看,走到这儿。走到这儿之后呢,往下走。他要发送心跳,可能是。哎,他就正常的要给NN发送心跳信息,对吧,那你看他怎么发的。哎,记住那跨进程通讯是不是得拿到对应的这个代理对象啊,啊,代理对象之后,你才能进行一个发送,那你看呗,往下看看他具体怎么发。还属于他吗?哎,有一个BP name note,是不是就刚才我们获取到那个代理对象啊,然后它调用了这个sat hot啊,Heartbe,那我们很清楚的就应该知道,在name not里面,它仍一定也有一个s hardbe,是不是这样呢?那我们来验证一下呗。就是你看多了,这个非常有意思啊,嗯,继续查找,叫name node。
19:02
RPC。Serve对吧,来聊这里面,那我们查找一下,看看有没有这个三。Heartbeat,哎,果然有是吧?哎,果然有,那有了它之后你看呗,那这里面说这个name no system,然后handle heartbeat,你就处理这个心跳呗,看一下。处理心跳,那处理心跳你看哪一个像呢?再往下走,那这里面是不是还有一个处理心跳相关的方法呀,那继续看。哎,还是处理心跳,那处理心跳继续往下走,往下走,你看这里面说,哎这个心跳管理者,他要更新心跳相关信息,因为我们未来是不是就关心他更新了哪些事儿啊啊,那好,那继续来呗,哎来,然后仍然是更新,那继续走。然后这里面说要更新,你看还是更新heartbeat,那继续往里点呗。嗯,点,然后这里面说又是更新heartbeat,那再点你就一直往里点,点到这之后你看到这。啥东西?是不是一个time now啊?你说set last update,比如说上次你发送的心跳的时间。
20:08
哎,是不是更新啊,哎,那这样的话就是让你这个心跳防止这个超时嘛,啊,然后另一块又干了什么事。除了这个更新这个时间之外,你看这儿。是否更新了存储状态相关的一些信息啊?哎,把这个name note啊,这个呃,接收到客户端请求过来的相关的这个呃数据,哎都把这个原数据信息更新完之后,发给这个data note啊,两个人进行相互的一个交互啊,这样就OK了,对吧?那这个data note它有没有这个N接收到之后有没有往回反应响应呢?你往回看往回看。再往回走。暂回整。这块看到没,这块是刚才往出发对吧?哎,这个接收到这个心跳信息,进行一个处理,那处理你看这块。是不是这个heartbeat response,也就是说我要把这个呃,处理完之后的结果信息是不是再返回给they notd,那两个人是不是在这三秒一次通讯,三秒一次通讯。
21:08
哎,这就是整个这个呃,Data node它启动之后要做的一些事情啊,还是比较清楚了哈,所以说呢,大家呢,呃,回头呢,再看源码的时候,你就拿这张图,诶把这盯着,然后一点点去看这个就比较清楚了,那好,那接下来仍然是面试官问你,诶看没看过data note启动流程,你怎么回答呢?那肯定说看过对不对,那你说你看过,那你你给他说点啥呀,那你告诉他,哎,其实这里面我们,诶他初始化的时候做了这么几件事儿,初始化了一个非常重要的一个对差服务。然后呢,初始化了我自己data note,它web页面的一个服务,然后还初始化了我自己的一个RPC的一个服务,接收客户端对他一个访问,然后还有两个最重要的事情,一个呢是向DN进行注册,另一个呢是发送相关的心跳信息,其实这就够了,那如果面试官诶仍然是还是问你说,那你你里面能不能再详细一点,那好,你把电脑拿过来,那之后呢,我现场给你演示啊,这个一直debug往里面去点对不对啊,一直点进去就可以了,嗯。
我来说两句