开发者学堂课程【Scala 核心编程 - 进阶:Spark Master 和 Worker 项目需求】学习笔记,与课程紧密连接,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/610/detail/9123
Spark Master 和 Worker 项目需求
内容介绍:
一、项目意义
二、项目需求分析
三、项目界面设计
Spark Master 和 Worker 进程通讯项目:
这个项目是一个经典项目,因为这里能充分体现它的妙用。
一、项目意义
1、深入理解 Spark 的 Master 和 Worker 的通讯机制
2、为了方便看 Spark 的底层源码(底层源码还有个细节就是设计模式,在升级模式中用的多一些),Sparke 的底层还是很优秀的一个框架,命名方式和源码保持一致(如:通讯消息类命名就是一致的)这样看起来就会更加清晰
3、加深对主机服务心跳检测机制(HeartBeat)的理解,并且这种机制并非Spark 独有,是所有组成都有的一个机制。
如果这边检测到一个 Worker 它如果死掉了那么还会有宕机机制的一个检测,还会有一个恢复机制来恢复它,方便以后 spark 源码二次开发。
二、项目需求分析
首先这个结构跟小黄鸡客服非常相似,只是服务器小黄鸡客服变成了 Master 这就是主服务器。
主服务器下面就是管理了 n 多个 Worker 工作服务器。那么 Worker 服务器要做什么事情呢?
第一个 worker 注册到 master ,master 完成注册。
要完成一个注册,并回复 walker,注册成功,这是要做的第一件工作。
就是说 Worker 上来过后,他进行 master 里面进行注册,那么就有一个hashmap 来进行管理。
Worker 定时发送心跳并在 master 接收到,它会每隔一定时间,比如说三秒,就像master 发一个心跳说我还活着。
Master 有一种机制会干什么呢?
启动另外一个 worker 让它补充进来。或者是一旦发现这个信息有问题的话,发一个短信息给谁呢?给管理员。
Master 接收到第三个 worker 的心跳后,要更新 worker 的最后一次发送心跳时间。我要更新你。
第五个给 master 启动一个定时任务,定时检测注册的 walker 有哪些没有更新心跳,并将其从 hashmap 删掉,就说他已经不能工作了,再保留到管理队列里面,或者管理的集合里面。
最后一个,Master worker 可以进行分布部署,只需把这个代码拿去运行一下就可以了。
如下图所示:
(1)Worker 注册到 Master,Master 完成注册,并回复worker注册成功
(2)Worker 定时发送心跳,并在Master 接收到
(3)Master 接收到 worker 心跳后,要更新该worker 的最近一次发送心跳的时间
(4)给Master 启动定时任务,定时检测注册的worker 有哪些,没有更新心跳,并将其从hashmap 中删除
(5)Master worker 进行分布式部署(Linux 系统)
三、项目界面设计
首先 master 开始工作,那么这样它可以接受什么呢?
它可以接收到这个 worker 发送的消息,当然它这边也可以回复,如果这边没有回复机制,就说我不给你回复,我只是检测你,这个回复就可以不要,如果有回复,他们就有回复,没有回复就没有,但是一般会有,一般比如像注册,如果你注册成功了但没有,给你一个信息说怎么样才好。
它这个是一个基本的结构,协议这块仍然是一样,这就变成 worker。发送消息给这个服务器,就是相当于发送给 master了。
也会定义一些一系列服务,当然反过来也是一样,就是 master,可能会发送这个消息或者协议发送这个信息给 worker,这是避免不了的,只是这个信息肯定不是这样写的,所以先把它打个问号在这里。
Worker actor 这边,它会也会创建这个号,它也有配置,要拿到谁的引用,如果是主动发起的,就需要拿到master 这边的信息,左边,也会有这个配置,必须得到谁的谁的这个引用,显然要得到这一个 master actor 的引用,这个道理都是一样。那么要启动 worker 所以这边就换成了 worker actor。
这时一启动就可以直接完成注册。这样以来它一启动就直接发送。直接发送注册信息。那么这边它就可以接收这个注册成功的消息。
主要通过应用实例,来剖析 Spark 的 Master 和 Worker 的通讯机制,因此功能比较简洁,
设计界面让如下: