00:00
万事开头难,我们先完成第一个功能,完成什么呢?完成worker的注册功能,也就是刚才我们所说的这个功能的第一个就是这个功能。OK,好,当然他呃他这边呃,完成过后呢,我要接收到worker注册成功的消息。啊,刚才这个程序图我已经简单的,呃,画了一下,就这个图。啊,这个图呢,有指导意义啊,待会儿呢,我们还要用,待会还要用好,现在呢,我们就来开始走代码啊走代码那打开我们的这个地方,我们先建一个文件夹啊,先建一个包,这个名字呢,我们就直接这样取,叫做sparkrk的,Spark的这个什么呢?Master。Master master和这个worker对吧,没有问题,同样的道理,我们呢也建三个包,我们也建三个包,好先来写一个,呃,测试的啊,待待会儿这个测试的呢,可能有用,好我先建第一个包包,第一个包呢,就是我们的server端,也就是我们的master那边。
01:07
好,另外一个呢,就是我们的客户端,那干脆这样名字啊,我们直接叫master也是可以的啊,直接叫master也是可以的,取个名字叫master吧。好,这边是我们写master的位置。没没问题,就叫master,那这边呢,我们叫worker。这边呢,我们就叫worker work好就叫worker,然后呢,我们还有一个大家通用的部分,仍然是我们的common,因为它要通讯。好,这样子我们就分成三个部分了,三个部分老规矩,先写master,好,我们先写第一个,OK,先写第一个,我们就叫Spark a master。Sparkmaster。Master给他一个类,好,然后呢,我们这边仍然是object对吧,也是Spark好这个地方呢,我们呃,换一种写法,我们直接写主函数试一下啊,我们都来玩一玩,同样我们继承一个X。
02:08
啊,进行一个actor。呃,进入艾以后呢,这边我们也要去重写这个方法对不对。好这个方法,那这里面呢,我们先把这个写起来好走到这啊,先把这个代码基本的代码走完。好,走完过后呢,我们来看一下这个需求啊,嗯,同样的道理,这边呢,我们要去先啊,先创建对不对,我们的这个actor。Aorsystem。X,那么前面这个配置呢,包括它的IP地址,我这个就不写了,我还是沿用,呃,这有的一个东东西啊,这个我就不写了,我直接呢把这个拿过来用一下啊,这个大家应该是知道什么意思啊,我以前这个是用过的,我就直接用用。啊,这个直接用用这个没问题。
03:02
好,这个代码我就不写它了,就直接整了一个config config里面呢,我有这个IP地址和端口,端口呢我们是1001005吧,后面都要做做成活的,现在呢都是写死的,待会全部把它改成这个灵活的部分啊好,现在呢我们把它引一下。好,引到这里来,这些代码我就不多多说了,然后呢,我们来创建这个东西,Act。Actor,好,Actor system,然后呢,写上我们就叫Spark master,就是我们这个,呃,这边的actor system就叫Spark master好点一下。好点,呃,给他给他把这个confi传进去,传进去过后呢,咱们来一个VR好这边呢,就叫Spark master的这个system,好写完了,写完过后呢,我们来创建一个啊,我们创建一个Spark master的这个这个什么actor。
04:06
Actor。因为他不是主动方,所以说他无需先持有对方的引用啊,你也拿不到,说白了,人家找你还行,你找别人那是找不到的。好,那这样子怎么做呢?Spark master,点我们的这个位置,好,这些代码前面同学们已然见过了啊,不,不新鲜,然后直接把它拿过来。拿过来我就取个名字了,怎么取名呢?咱们取名就叫Spark master,没问题啊,就叫Spark master,然后我们来。引入一些东西,点VR里面呢,我要引入它的一个引用,好现在呢,我们先启动一下啊,启动我们的Spark。Master,这个这边启动很简单,10SPARK master发出一个消息叫star。好,那这边我们就来写一下这个代码case,好,如果我接收到一个star的就代表,诶这个我接收到一个消息,就是说我我是谁服务器啊,我是master,就是master启动了,Master服务器启动,服务器启动了。
05:17
啊,启动了,等待别人来连接。好的,写到这儿。呃,那么这个启动,呃,这段配置呢,我们先简单测试一下看看呃有没有呃跑起来先看有没有跑起来啊,我先把这个下面先把这两个关闭一下。好,我先运行一把,那运行过后呢,我们看这边它有没有提示这个信息呢。好,我们可以看到呢,它目前应该是呃,启动了,那么我们看一下1005有没有在监听10005好,简单的瞅一眼,来,同学们night stand-AB more1把。对不对,好某一版呢,我们看到1005呢,确确实实啊,现在我们在这儿就没看到啊,这在处于监听状态,说明没有问题,做一个代码这块是没问题的,紧接着我们继续写。
06:08
因为这个离我们这个注册成功还有老远的一条路呢,那现在怎么办呢?好老规矩,分析好拿到的代码,你不分析你不要乱写啊,呃,问题来了,问题来了,你这一头。你这一头这个worker你一旦启动,就会发出一个注册的消息,说我来了。那你想一想,你想一想,你将来这个服务器这边他会管理很多很多的客户端,那显然我们应该有个map来管理它,那么请同学们思考,我们这个map应该放在哪里比较合适呢?大家觉得这个map就是将来这个管理我们worker的这个map应该放在哪个位置比较合适呢?释放不可能放这嘛,对吧,大家想都想得出来,肯定是放在我们这个X里面是不是啊,哎,肯定是放这个X里面,而且是一个可变的哈西麦,所以说在这里面呢,我们应该有个属性,能理解吗?什么属性呢?是一个multiple点这个哈西map还有印象吧。
07:15
诶不要忘了啊,我们这地方讲的都是有用的,这个地方是哈可变的,到时间呢,由他来管理和维护我们的一系列的这个worker,你有多少我都能管理。对吧,可能我也有机制,比如说我发现你们,我们最多一个master管1000个,那如果再多的话呢,我发一个协议给你,说请你找另外一个,我不接收那边那个家伙一得到是,诶我要找那个,他把IP地址给我,我找另外一个master,你们学radio radio的时候大家都知道像这种对吧,哨兵机制,还有检测机制,心跳机制,人家都是有的,其实底层都都是一个德行啊,都是一个德行啊,那这样子写完过后呢,我们有了这个机制过后,我们现在呢,应该写worker了,是不是这个道理啊,那你就不要犹豫。
08:00
那打开我们的这一个worker,我们就要写这段代码,那这个代码呢,老规矩,我们写一个Spark的这个worker。好的Spark worker呢,我们嗯,直接写一个object object,那我写Spark。Worker,然后呢,这边我们也以这个主函数的方式来玩好,同样我们要继承这个actor。对不对,要记住这个actor好,这边呢,我们应该要实现一个receive的方法。好的,Receive的方法。没问题,那么我们把这个地方偏函数也写上去啊,习惯,那有了这个地方怎么办呢?下面仍然是跟刚才那个小黄鸡客服找我们的那个服务器是一样的道理啊,前面呢,IP地址那一堆是吧,这个呢我就不去写了,因为这个配置这玩意儿呢,我也懒得去写,我就直接把这个先拿过来用一用,好吧,这个不是什么大的问题。
09:02
啊,面试官一问了,他也知道,你知道就行了,那首先这个是我的worker的啊,我就写这这这个worker啊写全一点吧,Worker的host,这是我的本地,本地的IP地址,我也写这个叫worker,对,这样明确一点吧,Port大家看到我的这边端口呢,我先用幺我我按顺序来吧,比如1001 1002 1003,但是你不能1005啊,1005其实也可以用,因为本他们不在同一个机器上啊,理论是可以用的,好下面这个地方呢,我用的是这个机制,这个机制呢,我我还是用我们大家熟悉的方式吧,呃,大家可能这个是一时半会,呃,就我就不去变了,其实我这写的简单一点,直接把这个写出来的啊,但是呢,这个呢,也跟我们前面讲的不太一致,其实是一样的啊,就相当于说我直接把master u写死了,这样肯定不好嘛。啊,所以说我还是改成我们原先那个比较灵活的方式吧,好,我写一下,那么这地方是我们的master的。
10:04
Master的这个host我改一把啊,Master host呢,现在目前我们是127.0.1,注意啊,你将来这个参数是传进来的啊,要根据实际情况来定,因为我是本地,我没有两台机器,没法演示啊,将来这个参数是要灵活的,在命令行里面输入,好,紧接着呢,我再写一个master的什么呀,Port能理解吧,Per我们看看刚才。刚才这个master的端口呢,我们是写的1005,因此呢,我在这地方也写1005,好吧,好,这边呢,我们来引入一个包包,好没问题,下边代码呢就可以来了,就创建我们的actor。Actor system。艾or c是诶什么玩意,这是C是C是这个对我们来说小小儿科啊,小儿科刚才写过了,就叫艾特的。
11:00
Actor system actor system,好,同样我们取个名字,这个名字呢,我我前面那个叫叫我给给他比对一下,你叫哦,你的名字是叫Spark master,我叫我就换一个名字了,诶我就换一个名字。来,我的名字呢,就叫sparkle worker就行了。啊,为了以示区别呢,我们写个零一,为什么呢,因为你将来。啊,你理论上这也可以啊,也可以不写,因为你将来肯定两个worker是不一样的嘛,所以写了同一个名字,你在不同机上也没问题,好然后呢,我再把这个config写进去,然后VAR,好,现在我们找到他的Spark work system。完事了。好,下面要来说了啊,各位同学现在呢,因为同学们前面有这个基础,你你们也知道我要干什么事,你们也知道我干什么事,我显然要去创建Spark worker的这个引用,这个act的一个引用,那现在老规矩啊,我就不多说了,就跟刚才那个思路一样的server的。
12:05
这个host啊,String,然后呢,Serve啊,叫master吧,所以叫master不叫server。叫master的,这个应该更明确一点,Master的host主机和master的一个什么呢?Port port,那这边我们写一个T啊T。好,这个写完了以后呢,同学们看到我们这边呢,应该有一个词叫master的什么呢?Master的一个代理,我取这个名字,呃,在这个Spark里面呢,它可能不叫refer,它叫pro proxy叫代理,这种名称其实就是我们前面讲的refer,所以说你们看底层源码的时候,你们看到是proxy,就是代表了一个refer,明白好同样的道理,这边呢,我们叫I。的那个C量,诶怎么怎么备出来了,谁的好好这样给它来一个消划线,同样我们紧接着呢,马上写出那个pre。
13:06
Play star,这个道理前面讲过,我们赶紧给他来进行一个初始化的任务,这就不做,不过多是说明了初始化咱们的什么玩意呢?就是这个这个master的代理。这个代理就是影片你们说的引用啊,只是它的名称,呃,发生了一个变化,说一下proxy是什么呢?是这个底层的代理,就是我们的代理啊,就是就是那个,呃,Master的那个艾的代理。及他的引用。好,Master的那个代理及那个引用啊,引用以前我们叫嘛。好,呃,那么怎么做呢?非常简单,Master的这个pro呢,我们就直接使用context,哎,点我们原先用过这个方法,叫什么名字还忘了吧,啊,就它是不是好这个名字路径,诶,我就可以用,刚才同学们看到这个路径,拿过来为我所用。
14:02
没问题。好,后面我我们再把它做灵活一点啊,各位同学后面写上UR,写上UR写上UR过后呢,不要忘了我们这个master,人家名字叫Spark。呃,这个这个我看看啊。两个都叫这个就不好了啊,我就要换个名字吧,叫零一,为什么呢?呃,因为将来你的master有可能有多个啊,我就换一个叫Spark master01。好的,那现在呢,我就写上零一就找到它了,那找到它这边呢,我们要啊,我们要做一个处理啊。啊,这边它为什么报错呀,啊,我这边写成V那就不行了,对不对,好,那现在我要把替换一下各位同学啊,因为这两个底值呢,我们是传进去的。哎,传进去的,所以我这写上,呃,刚才那个R啊server,诶master啊,怎么还还server master的这个host。
15:00
这边是master的一个端口。A master端口A走上啊,稍等。这个master的一个端口给它扔进去,好,这是我们这个初始化任务,那初始化任务呢,现在我这个客户端服务器端,我们就要发出一个star的请求,就说开始我要开始运行了。现在呢,我让这个这个就是我们这边创建,现在就可以创建什么呢?创建我们worker Spark worker的一个引用。啊,他的这个,哎,这个它的一个引用啊,或者叫代理都可以,我讲前面讲过这个事情,那么你怎么去创建呢?就是刚才你的18个点,我们刚才的这个叫做AS2AS of这个地方我们proxy。好,这边用六的方式来处理,因为他要传东西进去,所以说我这里写的是八。Worker传入我们的这个master啊,Master的host和master的端口。
16:04
哎,别写错了,然后给它取个名字,这个名字呢,我们就叫Spark worker。啊,SPA worker01,这是我们的第一个。啊,当然,呃,这个没没什么问题,大家应该能理解好,那这个时候我们点VR,那得到了这个艾引用,啊对艾引用,那么我们写全一点吧,叫Spark worker的一个引用,这样更清晰一点。好清晰一点,那拿到这个东西过后呢,我们就启动它了啊,启动我们的这个actor啊,非常简单,那启动的时候先这样玩一把吗?诶这个不对啊,我可refer,我就直接还是老规矩搞一个star。我启动了,那启动过后这边呢,大家都知道了,我们在这边要去处理一下得到的大对吧,前面都讲过的。那这个时候咱们的工作任务呢,有两个,第一个我先提示说我启动了。
17:04
第二个我要发出一个注册的信息,好,同学们我就写一个啊,就说就是什么呢,我提示一句话说呃,Worker。Worker启动了。启动了。对,是worker启动了,那么现在这样子啊,我们因为这个代码呢,哪个地方错了都会出问题,所以说我我现在一般的习惯是先跑一跑,看看这个能不能打印出来,而且这个master pro到底对不对,我一般会做一个简单的验证,这样的心里面就比较有底有底了,好,我简单的我不我的习惯不是把它写完再测试啊,我写一点写一部分我就测一下。啊,尤其是咱们这个初学者,第一次写一个代码呢,可以这样去试一下,好,我写一个SAR启动。好,测试一下吧。啊,调用了。好玩一把玩一把,看看我们这个代码有没有正确的运行呢?
18:00
先把它关闭一下,各位关闭所有好,我我把这些都先关吧,啊文件太多了。我先保存一下再关闭。保存所有。然后呢,我们把这个。Close other。啊,我们先启动Spark master,这个呢,刚才同学们已经看到是没问题的。这是没有问题的,看清楚了啊,没有任何的问题,那现在呢,我们再启动一下我们这一个worker worker呢,我也启动一下,看看有没有正确。好,我们可以看到呢,这个时候它也是没有任何问题的,他说启动了,而且呢,呃,这边这个地址我们看了一下也是no problem啊,千万别写错了,好,这说明这一步是没有问题的。那没有这个问题呢,我就有信心了,我就继续往下走了,诶这个时候我们开始发出一个什么呢,发出一个注册信息啊,注册的消息。注册的一个请求吧,我的消息都可以,那显然同学们一想到这,马上就要写我们的这个协议了,对吧,而且Spark的底层它就是这么写的,那么Spark底层发动这个,发动这个消息,我们要定这个协议,这个协议呢。
19:15
我们就按照它的一个规范来定义,我这里呢已经写了一些协议这块呢,我就不去啰嗦了啊,因为协议这块呢,我对我们来说,前面我已经解释过了,所以说这个协议我就先用一下啊,我这里定暂时定了两三个协议。谢谢。我写到这儿来。哎,同学们,我写到这来,我写一个什么呢,叫做还是老规矩,Message protocol。没问题吧?Part,然后呢,写到这,我把这几个协议拿过来大家看一下,同学们看第一个协议我是这样定义的啊,第一个呢,我有一个register。啊,Worker inform什么意思呢?这个就是我注册的时候,我发给服务器的信息,说我试试我的ID是多少号,我CPU有多少,我的内存多少,这个呢是人为定的啊,就就说我们在注册的时候肯定要把。
20:11
告诉服务器我CPU是有几颗,我的内存是多大是吧?一般来讲就是这么一个规则,当然你也可以加其他信息,比如说你还可以加上我的这个服务器IP地址是什么都都没问题,那可以加些其他信息,好,这是worker信息。那么第二个呢,大家看到这里我还整了一个worker in for。说老师你加这个东西干什么呢?而且大家看目前这个work in for跟我现在写的完全一样啊,我要说一下。啊,所以报这个work for是干什么的呢?啊,这个信息,这个这个这个信息将来将来啊,注意听将来是啊,将来是保存到。啊,保存到我们master的那个哈希map中的。
21:01
哪个地方呢,就是这个地方。就是将来这个地方这有个哈希map要保存到这里面,因为你将来要管理这么master,你得有这个master信息啊。有master,当然有些同学说了,老师,那master你把这个放进去不就完了吗?是这样子的啊,因为将来我们这个work系将来还会有扩展,打个比方,最简单的说,将来你这边一定会保存这个worker的最近一次心跳。所以说我把它分开写的。这也是一个合理的现象啊,包括SPA克底层他也这么去分别的,好,这个信息是保存master,呃,保存到哈希master哈希map的,这个map是干什么的?管理该哈希map。该哈西迈部是用于用于管理,管理什么呢?管理worker的很多个,那将来这个信息呢,会扩展啊,将来这个是会被扩展的啊,这个会被扩展。好,这个会被扩展起来,扩展。
22:01
啊,扩展。注意。就会会扩展啊扩展,而且大家有没有发现我这里没有写case。啊,我没写,老师你没有没写K4呢,因为我没有必要K,因为我在整个这个通讯机制里面,这个work in for不参与。他相当于说到那边去了,过后他重新打了一个对象,把它放进去,OK,所以说我这面加case,而这两个是这两个是协议,这个是相当于说他将来会用到了一个类型系,好下面这个呢再来看一下。啊,将来这个一定会扩展,会扩展,比如增加,比如增加。比如增加什么呢?增加worker,最近的一次心跳,最近最上一次啊,上一次的这个心跳时间。啊,心跳时间好了,那下面这个是干什么的呢?好,同学们看一下这个地方,你看我自己写的OBJECT5连加了object,这个最大的区别是我不需要再加这个字段了。
23:04
啊,他也不让你加一个字段,因为你是object,那我为什么我整一个work,这个仅仅表明我注册成功了,就是如果一旦你注册成功,我服服务器给你打一个这样的一个,呃,一个实例过来就行了。好,这个是干什么呢,这个是当。啊,当。当什么呢?当这个worker注册成功,Worker注册注册成功。干什么呢,服务器啊,服务器返回一个这样的。这样的一个实例啊,这样的一个对象,就是刚才所以说我就用的是object。啊,当然你要写个case也没什么,你要写个class也没什么问题,但是有点多余好多余好,这个就写完了,那现在呢,同学们知道我要干什么事了吗?好,打开这里,我现在要发消息,发一个注册消息给他,好,现在发送注册信息。那么发射中介信息呢,这个地方我们走的这个协议啊,走这个协议大家应该一下就知道,我肯定想走这个协议对吧。
24:07
啊,我给你我来了。好,告诉你,我要给你发这个信息,好,这个信息,那现在我们要把它发出去。在哪里呢?在worker这头,在worker这头呢,我们就发一个消息嘛,这个很简单,怎么发呢。因为我已经持有你的引用了,我想怎么发就怎么发好,现在呢,我把这个拿过来,诶写整错了啊,这个就是刚才我们写的。Register,我们这个,呃,Worker这个信息好的。那这里面呢,一共有三个参数要传进去,第一个是ID怎么办呢?好ID,那这样子啊,我我们做一个随机数给它传进去啊,是做成一个字符串的,当然你也可以写说老师我认为就是一号也可以。啊,一般我这里做成一个随机数,当然你们也可以搞别的啊,比如说我写一个啊叫做什么呢?诶写错写错了啊写到这写到哎,对是这啊就是va va叫什么呢?ID等于UU id.random。
25:09
阿娇怎么没有,没有那个re吗?是在哪个包里面,是java.ut里面是吗?诶是这个玩意儿吧,点random呃,ID点图string一下啊,我我做我就得我的这个ID是个随机的。啊,完了之后是ID11,那我就把ID填进去。那么CPU有几颗呢?CPU我就随便写一个啊,比如这个人的CPU是16颗CPU。好,然后呢,内存有多大呢,我就随机的整一个,比如说它有16个G。啊,1024好,给他传过去就可以了。好,这个呢,我们看到这报了一个错误啊,他说doesn't take work for,我们看是哪里有问题啊,找到这个位置来。一个四寸一个CPU应该没问题啊。
26:03
为什么他报一个错呢?找自己来。啊,写错了,刚才啊写错了import一下就行了吧,Import一下就行了啊刚才写错了,好这个就发出去了,这个发哪去了呢。发。服务器里面去了,那这也也就是说这个经过网络呢,这个哥们就把这息噼里啪啦就扔到这边来了,那扔到这呢,根据我们这个底层的信息消息机制,我们就在哪里接收到呢,诶我们这边就接收到了一个信息,我们马上来处理接收到worker发送的注册信息了。待会儿你给我发的信息很多,发送这个注册信息。注册信息,好,既然我拿到你的注册信息,当然我不在话下,我拿到你消注册信息了吗?那没问题,我打开我的这一个a master,我要开始来玩了。好,你现在给我传了一个什么信息,我知道了啊,你说你传了一个register register的一个注册信息,好,这里面信息我一下拿到,因为我们用的是对象提取器,好一个是CPU。
27:12
ICPU。点还有它的一个内存,好这个我一下就拿出来了。那都要我做什么事情呢?哎,各位朋友。诶,这个地方是。这怎么怎么怎么又错了。哦,我我刚刚是,我这是。啊没没有ED啊,怎么怎么老把整到这边这个啊好,我把它这个粘过来吧,粘过来好拿到了这边再重新移一下。好,那这个地方我们要做一个什么事情呢?这边为什么顶了两个腕儿顶了两次。把它删掉,删掉要重新再引上。啊,不要赢两个。好一次就行了,好,那现在我这里就接收到了,说诶接收到这个人呢,接收到什么呢?接收到了。
28:03
接收到客户端就是那个worker的一个注册信息了,现在我要注册信息。注册信息,那现在我要干什么呢?我要把它装入到我的这个哈希map去了,好现在跑不了了,哈希map就出来了,来,因为你要管理嘛,那我显然在这里定义,我要定义一个哈希迈普。干什么呢?哈希map,我要管理啊,我要管理,管理什么呢?管理这个worker work,所以说我的名字呢,也很简单,我就这样写了,叫WORK4。等于MU用可变的,大家回忆下啊,这个哈奇map怎么用的,那么这个MU里面map。外,好的,这边我们先引一个包进去,Map这边我们要指定一个类型。好,第一个呢,是它的实寸,这个时寸就做它的ID,第二个我们存什么玩意儿呢?第二个我们存入他的就是worker inform啊,不是注册,这个是worker inform刚才讲的啊,就是这里面保存的是我们每一个worker的信息。
29:09
好,我就把它扔到这个里面去。好,然后呢,我们以下相应的包。好,这个地方引一个包没问题,这个地方呢,也要引一个包,对不对,好port我们引的是可变的包就没问题了。大家回忆一下这是怎么做的,那么这个时候我们有了哈希map,我们也知道了要顶着,那就简单了,当我们接收到这个work信息,我们干一件什么事情呢?啊,我们就我们就干什么事情呢,我们先判断一下里面有没有对不对啊,当然理论上是说你注册的时候,按理说这个ID是很不不会重复的,对吧,但是为了安全起见呢,我们还做一个判断。就是点contents,它里面有没有这个遗传的ID呢?好,如果说是没有,好我就代表我要注册进去,那我注册的时候我要干什么事情呢?好的,我要先去创建。
30:06
我要创建一个什么信息呢?就是刚才老师说的这个信息,这个信息我要六一个work in for,把证据注意啊,现在看起来好像这这个IDCPU跟他一样,但是我说了将来要扩展的,所以一般来讲都会分开。一般来讲都会分底层,它也是这么干的,我创建这么一个对象。实例那简单的很,那么直接写个worker in for in for等于另一个,因为它不是样例类。啊,所以说work for把他们传进去,把IDCPUCPU,然后让就是这个内存写进去过后,那我就二话不说加入到我们的这个work哈希map没问题吧,很简单,一张代码怎么加的,还记记得吗?同学们,哈希可变哈希map要加一个KY6是那个,那个是怎么整的呀,咱们还记得吗?
31:04
对是加等完事啊,这个时候呢,我们就把这个ID放进去,ID就是你传进来的ID。好,然后这个work in for呢,就是我们放进去的这个信息放进去了,好大家看代码写错了,哪错了。哪去了?是不是应该把它刮起来呀?为什么要挂起来,你你括起来它才是代表一个元素吧,你如果这样家庭实间位是在在整那个一个二元组放进去,那那肯定不匹配嘛,对不对,是不是要括起来,诶同学们要记住这个细节啊,别忘了我们以前讲如果你忘了怎么办呢?不着急,打开这个笔记,上面写的很清晰,你看如果现在我们有这个笔记对吧,那简直是太小小儿科了,我们找到这,我们一看,诶这个老师以前讲过哪里呢?诶讲过哈希map。诶,应该我讲过这个哈希map的在这儿,哈希map我讲了什么呢?诶构建我还取值,诶哈希的增删改查在哪呢?往这一拉哦啊的真修改添加删除全都有啊添加往这一看,诶鲍老师讲过,这样子做的对不对,这样做的好,如果你要用那种方式的话,那你用这个箭头也行也行,两种方式都可以,我用的现在是。
32:19
这样一种方式对吧?哦,我用的是这种这另外一种方式,那哪种方式呢。我没写吗?大家还没写这个方式,那就那那就多补充一个啊,多补充一个好也很清清楚,如果说你一定要这样写,说老师我就不喜欢你这样子写法,对吧?哎,我这样写行不行呢?可以的啊,你要这样子写也可以的啊,那么就看你的呃喜好,我呢还是比较喜欢这种方式。好的,那这样子整完了以后,我们这个work呢,就基本上就放进去了,那么现在我们撤一把,诶对对还不行啊,你还忘了一件重要事情,你把这个写完了过后,你还得给人家回一个吧,说你成功了,斯帕克底层也给人家worker回复了个消息嘛,大家呢,我们这整完以后呢,我们就给他回一个消息,说干什么呢?诶诶你已经我已经你已经注册成功了,好给他回复一个,回复一个消息,说什么呢?说这个注册成功。
33:20
吧,注册成功。成功,那么你注册成功,你回复的时候直接很简单了,就升走,那这个时候我们回复的这个消息呢,我已经写好了,就是一个这样玩意,就是就是一个高标件,那这样就更简单的,直接给它,给它扔一个工具就行了,好直接这样写就完事了,好我们一下包就可以了。问题注意啊,这是它的一个op,返回去返回去,我们拿到这个worker,他肯定会得到一个信息,那简单,我们这来再整一个信息,如果我们拿到这个东西了,说明什么呢?诶注册成功了,我就说一下我是谁,我注册成功。啊,就是worker ID worker ID等于这么的一个玩意儿,就ID的他注册成功了。
34:09
他注册成功。注册成功。好的,那现在同学们,现在我们这就OK,我们把它打印出来看一看啊,现在我们做到了验证的时候了,再想想这个逻辑啊,发过去走一下,这边不着急,十大启动,然后接到一个消息,如果没有,我就创建一个事例,把它扔进去,扔进去放这好,这样子呢,我们在这。把这个哈希map打出来,看看到底是多少东西啊,比如说呃,我打一句话就是说目前有多少个actor是吧,有多多少个worker我们。整一个整一句话啊,整一句话。说我们写句话就是那个work在服务器啊,就是服务器,服务器的这个workers有多少东西呢?打印一下。打印下叫works。
35:01
好,这样子就就能看到到底有没有吗?啊好同学们,现在我们来测一把吧,看看有没有问题啊,不知道行不行。啊,如果不行我们再调调啊把先关一下。关闭,我们先启动,还是老规矩啊,先启动我们的master,先启动我们的master。好,Master呢,这个一起起来给我想想看有没有问题。好,同学们可以看到启动了,它启动了,现在呢,我们再来启动一下我们的worker,这个worker呢,它一启动过后,他就去注册啊,注册成功它得到一个消息,注册成功,我们看看有没有这样的一个信息返回啊,OK。好,我们运行过后呢,我们发现这个地方它启动了,而且确实返回了一个这样一信息,大家看清楚了,他说work ID等于这个玩意注册成功了,那么在我们的master这边呢,我们应该诶果果然看到一个信息,就work说map里面有这么一个玩意,好,但是ID是这个,然后呢,他的这个信息是这样一个信息,看到没有,好这是可以的,也就是说目前呢,我们这个注册信息就搞定了。
36:04
就注册信息搞定好,那关于这一块呢,呃,关于注册信息我们给大家就说到这儿,我们简单的板述一下啊呃,因为我是分几个模模块来完成的,我先这个板述一下,同学们好,那看看我们刚才是做了什么事呢?好,同学们,我们往下搂啊往下搂。好,现在呢,我们做了代码的实现,完成了第一个功能。完成了第一个功能是这样子对吧?好,这是第一个功能是来一个蓝色的标号好不好,蓝色的标号标题三对不对啊没问题,都很简单啊,这些代码都很简单啊,啊大家这个大家一看就会了。啊,都没什么难度。然后呢,这个思路图呢,我也跟大家简简单的给他写到这啊,代码实现,下面是代码实现。
37:00
代码实现,呃,实现好这个思路图呢,我还是给大家放到这儿对吧,多少呢有一点帮助,因为后面我们扩展呢,也要依赖于这个图。好把它放到这后面,心跳加速呢,难度就稍微有一点了,就是还是要动动脑筋的,那代码实现,我具体来说我们这个结构是这样写的,就是我分别呢写了这么三个文件,对吧。一个message,一个Spark,一个worker,然后我们把它放到这里来。啊,然后呢,代码我就给大家整理一下,第一个版本的对吧,特简单master好代码我就不啰嗦,直接粘过来。好,然后呢,我们来插入一个表格对吧?诶代码还是要写的。好,写到这我们就叫什么呢啊,叫Spark master。Spark scan。
38:01
好,就上面那个文件,那紧接着这个做完了以后呢,我们又写了一段代码,对吧?诶我们写了写了它的什么呢?这个Spark的Spark的这个worker.scan好,这段代码呢,我们是在这个地方写的。把它放到笔记中去,这个写完了以后呢,诶,我们还写了一点它的它的格式就是那个呃呀,它的那个什么协议啊pro。点scan,好,这段代码呢,我也给大家放到这里来,对吧,非常的简单啊,当然后面要逐渐的扩展好同学们关于Spark的个注册和注册回复,我们就先说到这里。
我来说两句