当前位置: 首页 > news >正文

Spark大数据处理:技术、应用与性能优化【1.9】

4.4.1 通信框架AKKA

Spark在模块间通信使⽤的是AKKA框架。AKKA基于Scala开发,⽤于编写Actor应⽤。Actor模型在并发编程中是⽐较常⻅的⼀种模型。很多开发语⾔都提供了原⽣的Actor模型(Erlang、Scala)。Actors是⼀些包含状态和⾏为的对象。它们通过显式传递消息来进⾏通信,这些消息会被发送到它们的收件箱中(消息队列)。从某种意义上来说,Actor是⾯向对象编程中最严格的实现形式。它们之间可以通过消息来通信。⼀个Actor收到其他Actor的信息后,可以根据需要做出各种响应。通过Scala的强⼤模式匹配功能可以让⽤户⾃定义多样化的消息。Actor建⽴⼀个消息队列,每次收到消息后,放⼊队列,⽽它每次也从队列中取出消息体来处理。通常情况下,这个过程是循环的。让Actor可以时刻接收处理发送来的消息。

注意:⼀个ActorSystem是⼀个重量级的结构。它会分配N个线程。所以对于每⼀个应⽤来说,仅创建⼀个ActorSystem即可。

AKKA Actor树形结构Actors以树形结构组织起来。⼀个Actor可能会把⾃⼰的任务划分成更多更⼩的、利于管理的⼦任务。为了达到这个⽬的,它会开启⾃⼰的⼦Actor,并负责监督这些⼦Actor。关于监督的具体细节就不在这⾥讨论了。我们只需知道⼀点,就是每⼀个Actor都会有⼀个监督者,即创建这些Actor的Actor。

AKKA的优势和特性如下。

1)并⾏和分布式:AKKA在设计时采⽤了异步通信和分布式架构。

2)可靠性:在本地/远程都有监控和恢复机制。

3)⾼性能:在单机环境中每秒可发送50000000个消息。1GB内存中可创建和保持2500000个Actor对象。

4)去中⼼:区别于Master-Slave模式,采取⽆中⼼节点的架构。

5)可扩展性:可以在分布式环境下进⾏Scale out,线性扩充计算能⼒。

可以看到AKKA具有强⼤的并发处理能⼒,在国内,豌⾖荚对AKKA集群做了很有深度的研究和实践,感兴趣的读者可以进⼀步了解。

Spark中并没有充分挖掘AKKA强⼤的并⾏计算能⼒,⽽是将其作为分布式系统中的RPC框架。很多组件封装为Actor,进⾏控制和状态通信。

Spark中的Client、Master和Worker都是⼀个Actor。

例如,Master通过worker.actor!LaunchDriver(driver.id, driver.desc)向Worker节点发送启动Driver命令消息,在Worker节点中通过receive的⽅式响应命令消息。

override def receive = { ……

case LaunchDriver(driverId, driverDesc) => { ……

} ……

综上所述,通过AKKA简洁地实现了Spark模块间通信。

4.4.2 Client、Master和Worker间的通信

在Standalone模式下,存在以下⾓⾊。

·Client:提交作业。

·Master:接收作业,启动Driver和Executor,管理Worker。

·Worker:管理节点资源,启动Driver和Executor。

1.模块间的主要消息

这⾥结合图4-15列出了各个模块之间传递的主要消息及其作⽤:

(1)Client to Master

RegisterApplication:注册应⽤。

(2)Master to Client

·RegisteredApplication:注册应⽤后,回复给Client。

·ExecutorAdded:通知Client Worker已经启动了Executor,当向Worker发送Launch-Executor时,通知Client Actor。

·ExecutorUpdated:通知Client Executor状态已更新。

(3)Master to Worker

·LaunchExecutor:启动Executor。

·RegisteredWorker:Worker注册的回复。

·RegisterWorkerFailed:注册Worker失败的回复。

·KillExecutor:停⽌Executor进程。

(4)Worker to Master

·RegisterWorker:注册Worker。

·Heartbeat:周期性地Master发送⼼跳信息。

·ExecutorStateChanged:通知Master,Executor状态更新。

2.主要的通信逻辑

Actor之间,消息发送端通过“!”符号发送消息,接收端通过receive⽅法中的case模式匹配接收和处理消息。下⾯通过源码介绍Client、Master、Worker这

http://www.jsqmd.com/news/385251/

相关文章:

  • 从理论到生产:化学AI智能体的架构设计全流程解析
  • 廿八总结
  • AI 工厂 #01|工业系统如何引入 Agent
  • Windows11 Ubuntu20.04 双系统
  • AI系统监控预警的技术原理,AI应用架构师带你了解
  • Java 可变参数 Collections 不可变集合
  • D.二分查找-二分答案-最小化最大值——1760. 袋子里最少数目的球
  • [git start]
  • 非结构化数据处理的容错机制设计
  • HDFS 与 MapReduce 的完美结合:大数据处理的核心技术
  • 题解:洛谷 P9389 [THUPC 2023 决赛] 烂柯杯
  • 数据科学中的图计算:Neo4j和GraphX应用解析
  • Using Jamfiles and Jambase
  • 爬虫数据清洗:Pandas 处理缺失值与异常
  • 实用指南:[linux仓库]线程池[线程玖]
  • 爬虫结果存入 MySQL:批量插入优化
  • [嵌入式系统-215]:线性电源与开关电源各自的工作原理,通俗易懂
  • nodejs+vue3的玉米病虫害远程咨询系统的 小程序
  • [嵌入式系统-214]:线性电源与开关电源
  • nodejs+vue3的社区儿童玩具交易系统
  • nodejs+vue3的社区外来人员登记管理系统 流动人口管理系统
  • nodejs+vue3的旅游民宿预定管理系统的设计与实现
  • nodejs+vue3的校园服务平台的设计与实现
  • nodejs+vue3的企业固定资产管理系统
  • nodejs+vue3的地方扶贫管理系统
  • 集体好奇心推动团队的创新驱动
  • 大数据领域Kafka的消息堆积问题解决
  • 从线性模型到S型曲线:广告投入与销售增长关系的系统建模
  • 【linux项目】2-9 k8s集群rancher界面的搭建以及本地habor镜像仓库的部署深度解析:原理、实战与踩坑记录
  • 加入L-Tester开源任务:自动化测试平台