00:00
好,同学们,下面呢,我们继续来学这个阿卡,那么我们讲完这个阿卡的一个网络,这个编程过后呢,我们下面来写一个叫做Spark master和worker的一个进程通讯的项目,那么这个也是,呃,很多这个呃,就是老师或者是咱们课件那个书上都会讲的一个经典项目。啊,为什么呢?因为这里能够充分的体现我们这个阿卡的它的一个妙用啊,妙用,那么我们先说一下这个进程通讯项目的意义是为什么要讲它第一个呢,深入的理解Spark的master和worker,就是我们的主从的通讯机制,对第二个呢,是为了同学们方便同学们看看Spark的底层源码,当然看底层源码呢,还有一个细节就是我们的设计模式,我们设计模式呢,下午也要开始讲解。因为升级模式它用的比较多,呃,不得不说卡的这个底层,包括Spark这个底层还是非常优秀的啊,作为一个作为一个算法,作为一个大数据算法,还是非常优秀的一个框架,所以说现在别人这个起来了,那也不是说无缘无故的对吧。
01:15
那么命名的我们采用的命名方式呢,跟源码我们尽量保持一致啊,比如说像通讯消息类的类类名我们都是一致的,这样大家看起来就做到更更清晰,就是我这写的名字呢,跟同学们看的源码的名字几乎保持一样。第三点呢,加深对主从服务器心跳机制检测的理念,叫做heartbeat,这种机制啊,不是不是我们这个Spark独有的,包括我我在这个003年左右,我们在公司开发。这个服务的时候,我们自己也会自己写一个这个hardbe叫心跳检测,这是所有的组成都有的一个机制,不仅仅是Spark有的,因为这边如果检测到有一个worker,它如果死掉了。
02:06
那么还会有这个宕机机制的一个检测,如果发现死掉了,还会有什么呢?还会有恢复机制。啊等等,所以说呃,同时呢,也是方便以后大家都Spark源码的二次开发,呃,因为你们将来拿到这个Spark过后呢,呃,根据你的业务逻辑,你可能会对Spark源码做一个开发,好,这是我们讲这个项目的一个意义所在,我先给大家整到这来,好有了这个东西过后呢,我们下面呢,就开始啊分析,直接上代码啊,把它走到这来。好,我先定位到这里啊,说一下我们要讲的这个内容,好定位,那我们讲什么呢?往下拉啊,这个内容太多了,好。我们现在讲的是Spark的master和worker的一个进程通讯的项目。那刚才讲了一下项目的意义啊,就是咱为什么要去讲它呢?我觉得有这么三点是。
03:03
要是能体现出讲这个项目的它的作用或者是价值,好第一个对吧,我讲了一下这个。好,第二个对吧,第三个这里提到了一个心跳检测机制,这个机制呢,是将来同学们用的很多的,好有了这个意义所在呢,我们下面就来看一下我们这个项目需求分析,就是做什么事情啊,先来看一下我的一个需求分析,很简单啊,我们要做这么一个事情,首先这个结构呢,跟刚才小黄鸡客服非常相似,呃,只是我们的服务器,小黄鸡客服呢,变成了master,这是我们的主主服务器。那么我们这个主服务器下面呢,接管了或者是管理了N多的worker服务器,Worker就是我们的重服务器嘛,工作服务器,那么worker服务器要做什么事情?第一个worker注册到master master完成注册。
04:00
哎,他要完成一个注册,并回复worker,注册成功,这是我们要做的第一件工作。就说WORK1上来过后,他进行master里面去进行这个注册,说我归你管了,那么这边我们有一个哈希map来进行管理。好,那么worker定时发送心跳,并在master接收到,就是它会每隔一定时间,比如说我们定三秒。三秒就向master发一个心跳,说,我还活着。啊,不然master如果这个他他以为你还你你其实已经死了,但是你他不知道,所以说这个性能就会急剧下降。那如果死掉的话,Master有一种机制干什么呢?启动另外一个,他会有一个启动另外一个worker让他。补充进来。或者是把这个信息一旦发现有问题的话,发一个短信息给谁呢?给管理员,比如你这有个管理员小聊啊,发发一个短信,或者发一个消息,发个邮件给这个管理员说哎,有个服务器宕机了,你赶紧处理。
05:02
不然的话,这个管理员还在外面玩呢,是不是整个这个服务器都瘫了是吧,他肯定要出问题的。master接收到第三个,Master接收到worker的心跳后,要更新worker的最后一次发送心跳时间。啊,我要更新你,这样我才知道你到底死没死。第五一个,给master启动一个定时任务,定时检测注册的worker有哪些没有更新心跳,并将其从哈希map删掉,就说他已经不能工作了,你再保留到我的管理队列里面,或者管理的这个集合里面就没有意义,把它干掉就完了。最后一个呢,Master worker可以进行分布部署,这个呢,到时间同学们把这个代码拿去运行一下就可以了,只要Windows没问题,Linuxx也就不会什么问题。好,基于这样几个需求分析完了过后呢,我们现在界面就不多说了,我们直接实现功能啊,我们一步实现,先把刚才这个需求拿过来,我们自己直接就走代码啊,就一步步的整就行了。
06:04
好,同学们,我刚才说了一下项目需求的分析,大家应该,呃,应该大致知道我要干什么事,所以说我们做什么事情先得明确要做什么对吧?所以说呃,为什么老师讲课反复在说这个事呢?就是因为我们先要明确做什么,我们才能把这个东西做好。好,这是我的一个示意图。对,然后呢,我说了我们要干的事情,一共有这么。这么四件啊,第五件事情呢,就是到时候大家部署一下就完了。好,那这个地方我们写第一个,诶第一个事情,第二个事情,这是Spark的核心,前四个是它的核心,好第五一个好欧了。那有了这些需求分析过后呢,我们这个界面设计很简单,大家这不存在什么界面设计啊,就是大家看后面的效果就行了,那还是老规矩,我呢,为了讲课方便呢,还是把前面讲的这个东西拿过来用一下,我稍微改一改,因为我们讲的Spark master worker,它的本体的机制跟这个一样,只是微有差别,那为了方便呢,我不会再重新画一遍,我这样做啊,我也不会去动它,我把这个复制一下,因为为了讲课方便,同学们理解到位呢,我还是需要这个图来辅助我授课的。
07:26
所以说我把它呢,放到这个地方来。好,同学们到这来,然后呢,我要改一改这个东西了啊,同学们注意听注意听,现在呢,我做一下这个程序结构图的分析。首先呢,Server这边呢,我们把这个端口就换一下吧,不要老让它变,变成我们说1000,比如说10005吧,好吧,然后这边呢,它也有actor system,它也有主主程序,然后这个主程序里面也会创建actor system,它要去创建的是什么呢?不是小黄鸡了,是master。
08:04
诶是master actor,那么这个地方呢,它仍然因为它是处于监听的状态,所以说他也应该有这种配置的那种网络配置的信息在里面,好,这里面呢,我们也去启动我们的这个master master这个act没问题,对吧,大体都是这样子的,Master好就完事。那么针对这边,这边显然就不能叫yellow checking了,我们叫master,这个actor,他干什么事情呢?首先这里面也有receive方法,它会输出star,表示什么呢?我的我我的这个master开始工作了。哎,我这个master开始工作。对吧,那么这边他可以接收什么呢?它可以接收到我们,嗯,这个worker。发送的消息,当然他这边他也可以回复啊,他也可以回复,如果呃,我们这边没有这个回复机制,就说我不我不是给你回复,我只是检测你的话呢,这个回复就可以不要啊,如果有回复咱们就有回复,没有回复呃就没有,但是一般会有啊,一般比如像注册,你注册成功没有,我会给你给你一个信息说诶怎么样好,我们先说这个注册的事。
09:19
好,呃,那么这个是它的一个基本的结构,那协议这块呢,仍然是一样,这边就变成我们的worker。对吧,这边就是worker。发送消息给这个服务器,就是相当于发送给我们的master了。也会定义一些一系列服务,当然反过来,反过来呢也是一样,就是master呢,可能会发送这个消息或者协议,发送这个信息,信息给谁呢?给我们的worker,这是跑不了的。好,只是这个信息肯定不是这样写的了啊,我们先把它打个问号在这。这边我们也打一个问号,在这就分析完了,至于这边呢,好一样的道理,这边客户端呢,我们就叫must,就直接叫worker了。
10:10
啊,Worker好,Worker actor啊,这边呢,他会也会创建,创建这个好,这边呢它也有配置,他肯定也有配置,因为我要拿到谁的引用呢,因为你是主动发起者。你是主动发起的,所以说我需要拿到这个master这边的信息,所以说这边呢,也会有这个配置啊,必须得到谁的谁的这个引用呢,显然他要得到我们这一个master actor的引用啊,这个道理都是一样。啊,W这边我们要启动是我们的这个worker。好,下面呢,这边就换成了worker actor。对吧?Receive star表示什么呢?表示我们这一个,呃表示什么呢?表示我们这个呃,Worker启动了。
11:00
Work work启动。Work启动好,这个时候呢,他要做的事情就很多了啊,比如说第一个它可以发送什么呢?呃,这个时候一启动我们就直接完成注册。这样啊,他一启动就直接发送。直接发送什么呢,注册信息。就是我要注册了,我来了注册信息。信息,那这边呢,他可以接收接收这个注册成功的消息啊,接收这个注册成功的消息,好,我们先暂时就分析到这里。啊,大体呢,这个结构其实跟原先很像,但是变化也很大,变化一样的就变成多个了嘛,好,现在我们来开始写代码,写代码那首先呢。好,这个是我们项目的一个需求,我先截段视频。
我来说两句