Spark(26):Spark通讯架构

news2024/11/24 19:17:15

目录

0. 相关文章链接

1. Spark通信架构概述

2. Spark 通讯架构解析


0. 相关文章链接

 Spark文章汇总 

1. Spark通信架构概述

Spark 中通信框架的发展:

  • Spark 早期版本中采用 Akka 作为内部通信部件。
  • Spark1.3 中引入 Netty 通信框架,为了解决 Shuffle 的大数据传输问题使用
  • Spark1.6 中 Akka 和 Netty 可以配置使用。 Netty 完全实现了 Akka 在 Spark 中的功能。
  • Spark2 系列中, Spark 抛弃 Akka,使用 Netty。

Spark2.x 版本使用 Netty 通讯框架作为内部通讯组件。 Spark 基于 Netty 新的 RPC 框架借鉴了 Akka 的中的设计,它是基于 Actor 模型,如下图所示:

Spark 通讯框架中各个组件(Client/Master/Worker)可以认为是一个个独立的实体,各个实体之间通过消息来进行通信。具体各个组件之间的关系图如下: 

        Endpoint(Client/Master/Worker)有 1 个 InBox 和 N 个 OutBox(N>=1,N 取决于当前 Endpoint 与多少其他的Endpoint进行通信,一个与其通讯的其他Endpoint 对应一个OutBox),Endpoint 接收到的消息被写入 InBox,发送出去的消息写入 OutBox 并被发送到其他 Endpoint 的 InBox 中。

Spark 通信终端 :

  • Driver:  class DriverEndpoint extends IsolatedRpcEndpoint 
  • Executor :class CoarseGrainedExecutorBackend extends IsolatedRpcEndpoint 

2. Spark 通讯架构解析

Spark 通信架构如下图所示:

  • RpcEndpoint:RPC 通信终端。Spark 针对每个节点(Client/Master/Worker)都称之为一个 RPC 终端,且都实现 RpcEndpoint 接口,内部根据不同端点的需求,设计不同的消息和不同的业务处理,如果需要发送(询问)则调用 Dispatcher。在 Spark 中,所有的终端都存在生命周期:Constructor 、 onStart 、 receive* 、 onStop
  • RpcEnv:RPC 上下文环境,每个 RPC 终端运行时依赖的上下文环境称为 RpcEnv;在把当前 Spark 版本中使用的 NettyRpcEnv 
  • Dispatcher:消息调度(分发)器,针对于 RPC 终端需要发送远程消息或者从远程 RPC 接收到的消息,分发至对应的指令收件箱(发件箱)。如果指令接收方是自己则存入收件箱,如果指令接收方不是自己,则放入发件箱; 
  • Inbox:指令消息收件箱。一个本地 RpcEndpoint 对应一个收件箱,Dispatcher 在每次向 Inbox 存入消息时,都将对应 EndpointData 加入内部 ReceiverQueue 中,另外 Dispatcher创建时会启动一个单独线程进行轮询 ReceiverQueue,进行收件箱消息消费; 
  • RpcEndpointRef:RpcEndpointRef 是对远程 RpcEndpoint 的一个引用。当我们需要向一个具体的 RpcEndpoint 发送消息时,一般我们需要获取到该 RpcEndpoint 的引用,然后通过该应用发送消息。 
  • OutBox:指令消息发件箱。对于当前 RpcEndpoint 来说,一个目标 RpcEndpoint 对应一个发件箱,如果向多个目标RpcEndpoint发送信息,则有多个OutBox。当消息放入Outbox 后,紧接着通过 TransportClient 将消息发送出去。消息放入发件箱以及发送过程是在同一个线程中进行; 
  • RpcAddress:表示远程的 RpcEndpointRef 的地址,Host + Port。 
  • TransportClient:Netty 通信客户端,一个 OutBox 对应一个 TransportClient,TransportClient 不断轮询 OutBox,根据 OutBox 消息的 receiver 信息,请求对应的远程 TransportServer; 
  • TransportServer:Netty 通信服务端,一个 RpcEndpoint 对应一个 TransportServer,接受远程消息后调用 Dispatcher 分发消息至对应收发件箱; 
     

注:其他Spark相关系列文章链接由此进 ->  Spark文章汇总 


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/765323.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

靶机渗透之prime1(解法2)

prime1 靶机渗透获取目标shell查看当前用户下的信息查找是否含有有效的备份文件经过查找找到enc文件密码md5格式生成登录靶机Prime提权成功获取flag 靶机渗透 获取目标shell 查看当前用户下的信息 在当前文件夹下,enc文件需要密码,尝试去寻找该文件的密…

移远通信发布新款5G/4G、LPWA和GNSS天线,进一步优化物联网终端性能

2023年7月17日,全球领先的物联网整体解决方案供应商移远通信宣布,再次推出三款新型天线产品,以更优的通信和定位性能,满足各类物联网终端在5G/4G、LPWA和GNSS等技术上的更高设计需求。这三款天线包括: YEMN926J1A&…

【GlobalMapper精品教程】061:快速生成全球任意地区等高线

本文讲解在globalmapper中根据任意指定的区域下载数字地形并生成等高线,支持在CASS中打开并编辑。 文章目录 一、指定下载区域二、下载地形数据三、生成等高线四、投影转换五、导出等高线一、指定下载区域 首先,通过在线地图指定一个区域。当然你有区域范围,可以直接下载。…

爱上PyCharm全新UI的五个理由!让Python开发更个性化

在2023.1版本中, JetBrains官方产品团队对 PyCharm 的外观进行了重新设计,目标是降低视觉复杂性,使用户能够轻松访问基本功能,并根据需要逐级呈现复杂功能 – 打造整洁、现代且专业的外观和质感。 在本文中,我们将进一…

基于python+ResNet50算法实现一个图像分类识别系统入门

一、目录 ResNet50介绍图片模型训练预测项目扩展 在本文中将介绍使用Python语言,基于TensorFlow搭建ResNet50卷积神经网络对四种动物图像数据集进行训练,观察其模型训练效果。 二、ResNet50介绍 ResNet50是一种基于深度卷积神经网络(Conv…

ChatGPT助力DevOps的优势与局限

一、前言 DevOps 是一种方法论,旨在提高软件开发和 IT 运营团队的协作和效率。DevOps 涉及各种任务和流程的自动化,例如规划、编码、测试、部署、监控和故障排除。然而,其中一些任务和流程仍然有大量任务需要人工手动处理,而这会…

Debian 系统安装中文输入法-iTOP3588开发板

Debian 系统烧写完成之后,并没有中文输入功能。本文档将介绍如何安装 ibus pinyin 输入法。 首先安装 fcitx 对应的工具,如下图所示: apt-get install fcitx fcitx-tools fcitx-config* fcitx-frontend* fcitx-module* fcitx-ui-* presage …

TDengine 的查询性能与老牌时序数据库相比如何?来看看

在上一篇文章《IoT 场景下写入性能:TDengine16.2 x InfluxDB》中,我们基于 IoT 场景下的 TSBS 时序数据库(Time Series Database)性能基准测试报告对三大数据库写入性能进行了相关解读,较为直观地展现出了 TDengine 的…

springboot @Async 异步调用接口处理数据

Async 异步背景 新增的数据需要分发给下游业务系统,由于下游业务系统状态未知,所以需要异步发送数据给下游业务系统。 系统生效按钮--->controller新增-->异步调用servcie--->数据集成 在springboot框架中实现步骤 首先在启动类上加上Enable…

数据分析:扩展企业微信、钉钉、飞书等告警通知渠道

本章节主要讲述如何扩展告警的通知渠道,以便将告警发送到第三方应用中 企业微信 实现目标 ●在鸿鹄中创建的告警被触发后,将告警通知发送至指定的企业微信群聊 配置步骤 1、打开“企业微信”,点击告警群右上角的“...”按钮 2、点击“群机器人…

opencv双目视觉标定、匹配和测量

双目视觉原理方面参照《学习Opencv》和大牛博客 http://blog.csdn.net/chenyusiyuan/article/details/5970799中16-19系列博客。本文主要记录我自己在双目视觉标定,立体匹配,测量中遇到的问题和解决方法,并附有代码,文末有代码下载的地址,欢迎交流。 博主使用的相机是USB双…

Android P 之Zygote进程源码分析

init进程是用户空间的第一个进程,而zygote进程则是第一个java进程。zygote进程是init进程的子进程,init进程通过解析rc文件,运行了zygote进程。 zygote是Android系统中一个相当重要的进程,它的主要功能就是执行Android应用程序。…

python 安装、配置、使用 xlrd模块、numpy模块

目录 一、xlrd模块 (一)安装xlrd模块 (二) pycharm 配置xlrd (三) 读取xls格式 (四)xlrd读取时间日期时,会是float类型,需要转换。 二、numpy模块 (一)n…

Docker 安装 MongoDB开启认证,创建只读用户权限。

创建带认证的mongdb容器 docker run -itd --name mongo -p 27017:27017 mongo --auth --auth 就是开启mongodb权限认证。如果不加 --auth 则是无权限认证,连接成功后任何用户都可以对数据库进行读写操作。 进入容器并创建用户 docker run -itd --name mongo -p 27…

九州云参与编写的《电力行业边缘计算白皮书》正式发布

近日,由中国通信标准化协会算网融合产业及标准推进委员会(CCSA TC621)牵头组织的2023算网融合产业发展峰会在北京成功召开。 会上,由中国信息通信研究院牵头联合北京航空航天大学、 国网信息通信产业集团、中国电力科学研究院、九…

区块链-java学习和劝退

字面意思:按照区域划分,每个区域通过可信的账本进行结算,将各个区域链接,形成小中心,大整体的财务结算认证体系; 1、学习前准备 您最好掌握一定的财务基本知识; 2、学习步骤 1)区…

❤️创意网页:如何创建一个漂亮的3D正六边形

✨博主:命运之光 🌸专栏:Python星辰秘典 🐳专栏:web开发(简单好用又好看) ❤️专栏:Java经典程序设计 ☀️博主的其他文章:点击进入博主的主页 前言:欢迎踏入…

Windows系统如何查看物理cpu核数?

Step1:WinR 打开cmd; Step2:输入dxdiag后,回车; Step3:即可查看:

Word字间距怎么调整?2023最新方法总结!

“作为一个Word新手,里面的好多功能我都没有弄清楚。今天正好写了一篇文章,但不知道应该怎么调整字间距。有朋友知道Word字间距怎么调的吗?快教教我!” Word作为一个便捷的办公软件,让我们的工作更方便。学习好Word的使…

CentOS 安装字体 微软雅黑

fc-list命令查看已经安装的字体 fc-list :langzh命令可以查看已安装的中文字体 找到windows系统里面的字体 上传到服务器 /usr/share/fonts/winFonts 下,winFonts目录是自己建立的,名称无要求 如果C:\Windows\Fonts下的字体没法直接传输将这个文件夹复…