第 3 章 Spark 通讯架构

news2024/12/23 23:14:56

3.1 Spark 通信架构概述

3.1 Spark 通信架构概述

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

什么是Akka?

Akka是一个开源的工具包和运行时,用于在Java虚拟机(JVM)上构建高度并发、分布式和容错的应用程序。它提供了一种编程模型和一组工具,简化了并发和分布式系统的开发。

Akka基于Actor模型,Actor模型是一种用于并发计算的数学模型。在Akka中,Actor是基本的构建块。Actor是轻量级、独立的实体,它们通过发送消息来相互通信。它们封装了状态和行为,每个Actor按顺序处理消息。

Akka的一个关键特点是它能够处理并发性和可扩展性。Akka的Actor可以分布在多台机器上,形成一个集群,它们可以无缝地进行通信,无论它们的物理位置如何。这使得可以开发出高度可扩展和容错的系统。

什么是Netty?

Netty是一个开源的、高性能的网络应用程序框架,用于快速开发可扩展的、高性能的网络服务器和客户端应用。它是基于Java NIO(New I/O)技术构建的,提供了异步的、事件驱动的网络编程模型。

Netty的设计目标是提供简单、高效、稳定的网络编程框架。它抽象了底层网络通信的细节,提供了易于使用的API,使开发者能够专注于业务逻辑而不必过多关注网络通信的复杂性。

Netty的核心组件是Channel(通道),它代表了网络通信的双向数据流。通过Channel,应用程序可以读取和写入数据,进行网络操作。Netty还提供了一组处理器(Handlers),用于处理数据的编解码、协议解析、业务逻辑等操作。开发者可以根据需要组合这些处理器来构建自己的网络应用程序。

Netty具有高性能和可扩展性的优势,它采用了异步、非阻塞的I/O模型,通过事件驱动的方式处理网络请求,能够支持大量并发连接和高吞吐量的数据传输。同时,Netty还提供了丰富的功能和扩展点,可以满足各种复杂的网络应用需求,如实现各种协议、构建高性能的服务器和客户端等。

总之,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

IsolatedRpcEndpoint类

"IsolatedRpcEndpoint"是Akka框架中的一个类,用于实现独立的远程过程调用(RPC)端点。

在Akka中,远程过程调用是指通过网络在不同的系统或进程之间进行方法调用和消息传递。"IsolatedRpcEndpoint"提供了一种机制,可以在分布式系统中创建可独立运行的RPC端点。它允许开发者定义自己的端点逻辑,并与其他系统进行通信。

"IsolatedRpcEndpoint"类提供了以下功能和特性:

  1. 独立性:每个IsolatedRpcEndpoint都在自己的Actor中运行,与其他端点相互隔离,从而确保各个端点之间的状态和行为不会相互影响。

  2. 生命周期管理:IsolatedRpcEndpoint提供了生命周期管理方法,可以在启动、停止和重启端点时执行相应的操作。

  3. 消息处理:端点可以接收和处理来自其他系统的消息,并根据需要发送响应。开发者可以实现自己的消息处理逻辑,根据接收到的消息执行相应的操作。

  4. 异常处理:IsolatedRpcEndpoint提供了异常处理机制,可以捕获和处理发生在端点内部的异常情况。

通过使用"IsolatedRpcEndpoint",开发者可以方便地构建分布式系统中的独立RPC端点,并实现与其他系统之间的通信。这样可以提高系统的可扩展性、容错性和并发性,并简化分布式系统的开发和管理过程。

3.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 分发消息至对应收发件箱;

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

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

相关文章

bug的合规描述

bug的合格描述: 发现问题的版本bug的合格描述: 开发人员需要知道出现问题的版本,才能够获取对应版本的代码来重现故障问题出现的环境 环境分为硬件环境和软件环境,详细的环境描述有利于故障的重现(如果是web项目,需…

到手价的监测要求和方法

品牌在做电商价格监测时,为什么要对到手价进行监测,这其中的原因还是很显现的,各平台的促销信息众多,如果只监测页面价的低价行为,那将有非常多的低价链接不会被发现,而这也会导致品牌做渠道管控时失去公平…

如何随机切换代理IP以避免被封禁?

在网络爬虫和数据抓取的领域,使用代理IP技术是非常常见的做法。使用代理IP可以有效地绕过网站的访问限制,提高访问速度和稳定性。然而,如果我们在访问网站时只使用一个代理IP,那么可能会被网站封禁,从而导致访问失败。…

开源预训练框架 MMPRETRAIN官方文档(高级指南)

1、准备数据集 1、自定义数据集(下面都是分类数据的自定义数据集准备) CustomDataset是一个通用数据集类,供您使用自己的数据集。要使用CustomDataset,您需要根据以下两种格式组织数据集文件: 1、子文件夹格式 在这…

正则表达式概念以及语法的使用

目录 1.概念 2. 为什么使用正则表达式? 3. 语法 1.普通字符 非打印字符 2. 特殊字符 3. 限定符 4. 定位符 5. 运算优先级 3.匹配规则 1. 基本模式匹配 2. 字符簇 3. 确定重复出现 1.概念 正则表达式(Regular Expression)是一种文本模式,包…

MAYA挖掘机绑定

打组 少选一个 放中心点 把它放组里 放中心点 创建骨骼 放骨骼 旋转不会带动上面骨骼 中心点的位置 骨骼和组做约束 活塞运行 放中心点 相互目标 管子短,需要加长 又短了 设置中心点 创建IK 制作控制器 让控制器带动模型动 手柄 IK 少一个控制器 删除 不用的…

途乐证券杠杆开户-A股首份半年报出炉 康缘药业净利同比增30.6%

中药职业迎成绩兑现期,多家公司上半年盈利估计倍增 7月12日晚,沪深两市首份半年报出炉。康缘药业半年报显示,公司上半年完成营收25.53亿元,同比添加21.74%;完成归母净利润2.76亿元,同比添加30.6%。 康缘药…

Endnote更新所有信息不全的参考文献(中英文文献信息不全)

方法一:手动 找到reference一个一个输入(这里针对某些没有doi的文献,有doi的也可以,只要你愿意) 方法二:自动 中文文献------选择txt格式导入endnote,在endnote里选择endnote import&#xf…

得物自建 DTS 平台的技术演进 | 精选

0 前言 DTS是数据传输平台(Data Transfer Platform的缩写) 随着得物App的用户流量增长,业务选择的数据库越来越多样化,异构数据源之间的数据同步需求也逐渐增多。为了控制成本并更好地支持业务发展,我们决定自建DTS平台。本文主要从技术选型、…

Qt6之通用文件格式.dat

dat文件,在Windows中大量存在,到处都有。如下图edge浏览器安装目录下就有一个dat文件,如果你强行打开,发现它是乱码的。 一、什么是dat文件 DAT 文件格式只是一种通用格式,它在文件中包含任何类型的数据,它…

使用 TensorRT、卡尔曼滤波器和 SORT 算法进行实时对象检测和跟踪:第 1 部分训练模型

实时物体检测和跟踪在监控、自动驾驶和机器人等各种应用中至关重要。这些任务需要能够实时处理高分辨率视频流的高效算法。近年来,基于深度学习的目标检测算法(例如YOLO、SSD和Faster R-CNN)在图像和视频中的目标检测和定位方面显示出了令人印象深刻的结果。然而,这些算法的…

JVM面试题详解

JVM介绍 JVM是什么? JVM由哪些部分组成?运行流程是什么? JVM组成 什么是程序计数器 你能给我详细的介绍Java堆吗? 什么是虚拟机栈? 堆栈的区别是什么? 能不能解释一下方法区 你听过直接内存吗 类加载器 …

tx视频 wx小程序 视频缓存方案

本文所有教程及源码、软件仅为技术研究。不涉及计算机信息系统功能的删除、修改、增加、干扰,更不会影响计算机信息系统的正常运行。不得将代码用于非法用途,如侵立删!tx视频 wx小程序 视频缓存方案 环境 win10CharlesInternet Download Manager抓包分析 搜索关键词可以很容…

《生活教育》期刊简介及投稿邮箱

《生活教育》期刊简介及投稿邮箱 《生活教育》杂志创办于1934,是中华人民共和国教育部主管的国家重点学术期刊,国家级期刊,中国知网全文收录G4期刊,它的理论是陶行知教育思想的主线和重要基石,陶行知的教育理论&#…

【力扣算法06】之 _2544_ 交替数字和- python

文章目录 问题描述示例1示例 2示例 3提示 思路分析代码分析完整代码运行示例效果截图 完结 问题描述 给你一个正整数 n 。n 中的每一位数字都会按下述规则分配一个符号: 最高有效位 上的数字分配到 正 号。 剩余每位上数字的符号都与其相邻数字相反。 返回所有数字及…

这5款多 GPU 渲染器提升渲染能力,赶紧用起来

多 GPU 渲染的强大功能可以使您的渲染能力增加一倍、三倍或更多。使用合适的多GPU渲染引擎可以帮助您在短时间内以更快的速度获得高质量的产品。什么是真正的多 GPU 渲染?最好的多 GPU 渲染引擎是什么? 什么是多 GPU 渲染和多 GPU 渲染引擎?…

编译mysql8.0.33遇见错误libstdc++.so.6: version CXXABI_1.3.9 not found

1 现象 在执行make编译mysql8.0.33时,遇见报错信息: /lib64/libstdc.so.6: version CXXABI_1.3.9 not found, 查看版本发现只是1.3.7。 2 解决方案 2.1 解决方案1 安装glibc-2.18。 2.1 解决方案2 执行如下指令,将新文件替…

[微信小程序] movable-view 可移动视图容器 - 范围问题

movable-view 可移动视图容器 可移动视图容器&#xff0c;在页面中可以拖拽滑动。movable-view必须在 movable-area 组件中&#xff0c;并且必须是直接子节点 <view><movable-area style"width: 750rpx;height: 200rpx;background-color: gainsboro;">&l…

【力扣算法10】之 7. 整数反转 python

文章目录 问题描述示例1示例2示例3示例4提示 思路分析代码分析完整代码详细分析运行效果截图调用示例运行结果 完结 问题描述 给你一个 32 位的有符号整数 x &#xff0c;返回将 x 中的数字部分反转后的结果。 如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] &…

(Onenet)STM32L+BC20+MQTT协议传输温湿度,ADC,电压,GPS数据到Onenet物联网平台

1、材料准备 准备以下材料 2、设备连接 2.1 插入物联网卡 首先把BC20核心板从开发板上拆下来 然后将物联卡放置在BC20核心板内 物联卡放置完成将BC20核心板重新插入到开发板内&#xff08;注意不要弄错方向&#xff09; 同时接入天线 2.2 连接ST-Link仿真器 用3条杜邦线接…