04.scala编程实战

04.scala编程实战

ID:36157515

大小:65.38 KB

页数:7页

时间:2019-05-06

04.scala编程实战_第1页
04.scala编程实战_第2页
04.scala编程实战_第3页
04.scala编程实战_第4页
04.scala编程实战_第5页
资源描述:

《04.scala编程实战》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Scala编程实战1.课程目标1.1.目标:熟练使用Scala编写程序2.项目概述2.1.需求目前大多数的分布式架构底层通信都是通过RPC实现的,RPC框架非常多,比如前我们学过的Hadoop项目的RPC通信框架,但是Hadoop在设计之初就是为了运行长达数小时的批量而设计的,在某些极端的情况下,任务提交的延迟很高,所有Hadoop的RPC显得有些笨重。Spark的RPC是通过Akka类库实现的,Akka用Scala语言开发,基于Actor并发模型实现,Akka具有高可靠、高性能、可扩展等特点,使用Akka可以轻松实现分布式RPC功能。1.1.Akka简介Akka基于Actor模型,提供了一

2、个用于构建可扩展的(Scalable)、弹性的(Resilient)、快速响应的(Responsive)应用程序的平台。Actor模型:在计算机科学领域,Actor模型是一个并行计算(ConcurrentComputation)模型,它把actor作为并行计算的基本元素来对待:为响应一个接收到的消息,一个actor能够自己做出一些决策,如创建更多的actor,或发送更多的消息,或者确定如何去响应接收到的下一个消息。Actor是Akka中最核心的概念,它是一个封装了状态和行为的对象,Actor之间可以通过交换消息的方式进行通信,每个Actor都有自己的收件箱(Mailbox)。通过Actor能

3、够简化锁及线程管理,可以非常容易地开发出正确地并发程序和并行系统,Actor具有如下特性:1.提供了一种高级抽象,能够简化在并发(Concurrency)/并行(Parallelism)应用场景下的编程开发2.提供了异步非阻塞的、高性能的事件驱动编程模型3.超级轻量级事件处理(每GB堆内存几百万Actor)1.项目实现1.1.架构图1.2.重要类介绍1.2.1.ActorSystem在Akka中,ActorSystem是一个重量级的结构,他需要分配多个线程,所以在实际应用中,ActorSystem通常是一个单例对象,我们可以使用这个ActorSystem创建很多Actor。1.2.2.Act

4、or在Akka中,Actor负责通信,在Actor中有一些重要的生命周期方法。1.preStart()方法:该方法在Actor对象构造方法执行后执行,整个Actor生命周期中仅执行一次。2.receive()方法:该方法在Actor的preStart方法执行完成后执行,用于接收消息,会被反复执行。1.1.Master类packagecn.itcast.sparkimportscala.concurrent.duration._importakka.actor.{Props,ActorSystem,Actor}importakka.actor.Actor.Receiveimportcom.ty

5、pesafe.config.ConfigFactoryimportscala.collection.mutable/***Master为整个集群中的主节点*Master继承了Actor*/classMasterextendsActor{//保存WorkerID和Work信息的mapvalidToWorker=newmutable.HashMap[String,WorkerInfo]//保存所有Worker信息的Setvalworkers=newmutable.HashSet[WorkerInfo]//Worker超时时间valWORKER_TIMEOUT=10*1000//重新receive

6、方法//导入隐式转换,用于启动定时器importcontext.dispatcher//构造方法执行完执行一次overridedefpreStart():Unit={//启动定时器,定时执行context.system.scheduler.schedule(0millis,WORKER_TIMEOUTmillis,self,CheckOfTimeOutWorker)}//该方法会被反复执行,用于接收消息,通过caseclass模式匹配接收消息overridedefreceive:Receive={//Worker向Master发送的注册消息caseRegisterWorker(id,work

7、erHost,memory,cores)=>{if(!idToWorker.contains(id)){valworker=newWorkerInfo(id,workerHost,memory,cores)workers.add(worker)idToWorker(id)=workersender!RegisteredWorker("192.168.10.1")}}//Worker向Master发送的心跳消息

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。