已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Scala编程实战1. 课程目标1.1. 目标:熟练使用Scala编写程序2. 项目概述2.1. 需求目前大多数的分布式架构底层通信都是通过RPC实现的,RPC框架非常多,比如前我们学过的Hadoop项目的RPC通信框架,但是Hadoop在设计之初就是为了运行长达数小时的批量而设计的,在某些极端的情况下,任务提交的延迟很高,所有Hadoop的RPC显得有些笨重。Spark 的RPC是通过Akka类库实现的,Akka用Scala语言开发,基于Actor并发模型实现,Akka具有高可靠、高性能、可扩展等特点,使用Akka可以轻松实现分布式RPC功能。2.2. Akka简介Akka基于Actor模型,提供了一个用于构建可扩展的(Scalable)、弹性的(Resilient)、快速响应的(Responsive)应用程序的平台。Actor模型:在计算机科学领域,Actor模型是一个并行计算(Concurrent Computation)模型,它把actor作为并行计算的基本元素来对待:为响应一个接收到的消息,一个actor能够自己做出一些决策,如创建更多的actor,或发送更多的消息,或者确定如何去响应接收到的下一个消息。Actor是Akka中最核心的概念,它是一个封装了状态和行为的对象,Actor之间可以通过交换消息的方式进行通信,每个Actor都有自己的收件箱(Mailbox)。通过Actor能够简化锁及线程管理,可以非常容易地开发出正确地并发程序和并行系统,Actor具有如下特性:1.提供了一种高级抽象,能够简化在并发(Concurrency)/并行(Parallelism)应用场景下的编程开发2.提供了异步非阻塞的、高性能的事件驱动编程模型3.超级轻量级事件处理(每GB堆内存几百万Actor)3. 项目实现3.1. 架构图3.2. 重要类介绍3.2.1. ActorSystem在Akka中,ActorSystem是一个重量级的结构,他需要分配多个线程,所以在实际应用中,ActorSystem通常是一个单例对象,我们可以使用这个ActorSystem创建很多Actor。3.2.2. Actor在Akka中,Actor负责通信,在Actor中有一些重要的生命周期方法。1. preStart()方法:该方法在Actor对象构造方法执行后执行,整个Actor生命周期中仅执行一次。2. receive()方法:该方法在Actor的preStart方法执行完成后执行,用于接收消息,会被反复执行。3.3. Master类package cn.itcast.sparkimport scala.concurrent.duration._import akka.actor.Props, ActorSystem, Actorimport akka.actor.Actor.Receiveimport com.typesafe.config.ConfigFactoryimport scala.collection.mutable/* * Master为整个集群中的主节点 * Master继承了Actor */class Master extends Actor /保存WorkerID和Work信息的map val idToWorker = new mutable.HashMapString, WorkerInfo /保存所有Worker信息的Set val workers = new mutable.HashSetWorkerInfo /Worker超时时间 val WORKER_TIMEOUT = 10 * 1000 /重新receive方法 /导入隐式转换,用于启动定时器 import context.dispatcher /构造方法执行完执行一次 override def preStart(): Unit = /启动定时器,定时执行 context.system.scheduler.schedule(0 millis, WORKER_TIMEOUT millis, self, CheckOfTimeOutWorker) /该方法会被反复执行,用于接收消息,通过case class模式匹配接收消息 override def receive: Receive = /Worker向Master发送的注册消息 case RegisterWorker(id, workerHost, memory, cores) = if(!idToWorker.contains(id) val worker = new WorkerInfo(id, workerHost, memory, cores) workers.add(worker) idToWorker(id) = worker sender ! RegisteredWorker() /Worker向Master发送的心跳消息 case HeartBeat(workerId) = val workerInfo = idToWorker(workerId) workerInfo.lastHeartbeat = System.currentTimeMillis() /Master自己向自己发送的定期检查超时Worker的消息 case CheckOfTimeOutWorker = val currentTime = System.currentTimeMillis() val toRemove = workers.filter(w = currentTime - w.lastHeartbeat WORKER_TIMEOUT).toArray for(worker import context.dispatcher /启动定时任务,向Master发送心跳 context.system.scheduler.schedule(0 millis, 5000 millis, self, SendHeartBeat) case SendHeartBeat = println(worker send heartbeat) master ! HeartBeat(id) object Worker def main(args: ArrayString) val clientPort = 2552 /创建WorkerActorSystem的必要参数 val configStr = s |vider = akka.remote.RemoteActorRefProvider |ty.tcp.port = $clientPort .stripMargin val config = ConfigFactory.pars
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公司矿井测风工工艺作业技术规程
- 橡胶栽培工创新应用模拟考核试卷含答案
- 2025-2026学年冀教版(新教材)二年级上册第三单元“乘法口诀”达标试卷(附参考答案)
- 四年级课程探究
- 河北省石家庄市栾城区2025-2026学年八年级(上)月考物理试卷(含答案)
- 特训06 二次函数-将军饮马与胡不归专练-2025-2026学年九年级数学上学期期中期末挑战满分冲刺卷(人教版)(解析版)
- 2025山西晋城市市政公用集团有限责任公司招聘工作人员87人笔试历年参考题库附带答案详解
- 2025中国铁塔秋季校园招聘笔试历年参考题库附带答案详解
- 2025浙江台州温岭市华阳再生资源有限公司招聘工作人员1人笔试历年参考题库附带答案详解
- 2025四川虹信软件股份有限公司招聘投标专员岗位拟录用人员笔试历年参考题库附带答案详解
- 《管理学》(第二版) 课件 高教版 第十六章 组织变革与创新;结语
- 2025至2030年中国护肤品美容品保健品行业市场发展监测及市场深度研究报告
- 危废培训课件下载
- ROHS及REACH法规合规声明模板
- 金属材料力学性能测试实验指导书
- 2025年陕西省单招试题及答案
- 2023年糖尿病足防治指南文档
- 联通渠道管理办法
- 学堂在线 走进医学 章节测试答案
- 2025年苏州市初中学业水平考试语文试题答案解析卷
- 骨盆修复培训课件
评论
0/150
提交评论