概述:
akka是rpc轻量级框架 ,Scala 在 2.11.x 版本中将 Akka 加入其中,作为其默认的 Actor,而老版本使用的 Actor 已经废弃
组成:
master
worker
两者之间使用akka中的rpc通信
通信的业务逻辑:
1. 启动master和worker
2. worker通过master引用sender向master发送注册信息(需要先拿到master引用)
master引用
ActorSystem创建master actor
actor层级
3. master接受worker注册信息
4. master反馈注册成功给worker
akka Actors遵循Actor模型
消息传递:
错误恢复 针对单点故障 会有运行在jvm上的master调控
akka通信项目:
override def
preStart执行完构造代码后只被调用一次
receive会一直被调用与scala中一次不一样
利用configFactory来解析配置文件信息获取到对应的config信息
1. 创建一个ActorSystem它是一个单例对象它负责创建和监督
host和port
拿到当前masterActorSystem
创建worker的actor new 简单的测试
通过他的这样的一个方法来获取这样的一个引用包含得了这样的一个途中的内容对应master地址的master的端口master 的actorSyytemuser/拿到当前我们这边master他的
master发送消息如何发送connectmaster经行模式匹配
进行模式匹配master反馈注册成功信息给
利用akka中actor实现简易版的spark 通信框架
通信业务逻辑:
1. 启动master和worker
2. 在worker的preStert方法里拿到master引用可以通过master引用向master发送注册信息
3. master接受worker注册信息将worker的注册信息进行保存master反馈注册成功
4.worker接受master反馈的注册成功信息worker定时的向master发送心跳
5. master接受worker的心跳信息master定时检查超时的worker并将它移除
master接受worker心跳信息首先当前worker
//判断worker是否已经注册
if (idToWorker.contains.)
判断逻辑
master接收worker的心跳信息workId
在master接受master心跳信息获取对应的workerid的workkerinfo
若何保存上一次的心跳信息
用于存放worker上一次的心跳时间获取当前系统时间t1赋值给worker上一次心跳时间
master开始执行定时调度器设置一个检查时间间隔t2
在定时开始启动后先获取当前系统时间t3时间间隔大于设定时间就
通过workerId获取workerinfo信息最终就返回了workerinfo当前系统时间,workinfo
workerInfo对应的上一次心跳时间
master定时检查的时间间隔checkout
schedule
判断我们超时的worker设置了一个定时检查worker的时间间隔
获取当前系统时间调用当前的系统时间按照表达式判断
判断过滤出所有超时的workerfilter经行过滤函数输入参数就是uworinfo
filter
所用活着的worker总数
按照每个workerinfo的内存大小降序排列