Spark 的 Http Broadcast 和 Torrent Broadcast 广播实现类的对比
在 Apache Spark 中,广播机制用于高效地将小型只读数据分发到集群中的各个执行器(Executor)。Spark 中主要有两种不同的广播实现方式:Http Broadcast 和 Torrent Broadcast。这两种方式的核心目标都是将数据高效地分发给所有工作节点,但它们在实现方式、效率和性能方面存在显著差异。以下是对这两种机制的详细对比:
1. 实现机制
- Http Broadcast:
- Http Broadcast 是早期的广播机制,Spark 会在驱动节点上启动一个内嵌的 HTTP 服务器,并将广播的数据上传到该服务器。
- 每个执行器在需要广播数据时,会通过 HTTP 请求从驱动程序的 HTTP 服务器下载数据。
- 驱动程序充当单一数据源,所有执行器从该源获取广播数据。
- Torrent Broadcast:
- Torrent Broadcast 是 Spark 1.5 版本引入的默认广播机制,采用类似 BitTorrent 的分布式数据传输方式。
- 驱动程序首先将广播数据分片成多个小块(chunks),这些块会首先发送给部分执行器。
- 执行器在接收到数据块后,会同时处理这些数据块,并像种子一样,将数据块进一步分发给其他执行器。这种方式形成链式的广播,提高了并发性。
- 每个执行器不仅仅从驱动获取数据,也可以从其他已经持有数据的执行器获取数据。
2. 效率与扩展性
-
Http Broadcast:
- 效率较低:由于每个执行器都必须从驱动节点的 HTTP 服务器下载广播数据,当集群规模较大时,驱动程序会成为瓶颈,导致广播的效率下降。驱动程序的带宽和计算资源都会受到限制,不能充分利用集群的带宽资源。
- 可扩展性差:在大规模集群中,多个执行器同时从驱动程序下载数据时会产生高负载,驱动程序可能会因为过多的网络请求而过载。这种集中式的广播方式难以扩展到大型集群。
-
Torrent Broadcast:
- 高效并发传输:Torrent Broadcast 通过将数据分块,并在多个节点之间形成链式传播,显著提高了广播数据的并发传输效率。每个执行器不必都从驱动程序获取数据,可以从其他执行器获取数据块,从而减轻了驱动节点的负载。
- 可扩展性强:由于数据传输是分布式的,不依赖于单一的驱动程序,Torrent Broadcast 在大规模集群中能够充分利用网络带宽资源,具备更好的扩展性。
3. 网络负载
- Http Broadcast:
- 集中式负载:驱动程序承载了所有广播数据的下载请求,因此网络负载集中在驱动节点。网络传输压力集中在驱动程序与各执行器之间的网络链路,容易形成传输瓶颈。
- Torrent Broadcast:
- 分布式负载:数据块通过多个节点以链式方式传播,网络负载分散在各个执行器之间。每个执行器既是数据的消费者也是数据的传播者,网络负载能够均匀分配,避免了集中式的网络瓶颈。
4. 容错性
- Http Broadcast:
- 容错性低:如果驱动程序的 HTTP 服务器出现故障,所有广播数据的分发都将受到影响。此时,广播任务可能会失败,甚至导致作业无法完成。
- Torrent Broadcast:
- 容错性强:由于 Torrent Broadcast 采用分布式传播方式,即使部分节点出现故障,其他节点仍可以继续传播数据。Spark 可以通过重试从其他节点获取数据块,从而具备更强的容错能力。
5. 驱动程序的负担
- Http Broadcast:
- 驱动程序压力大:由于所有执行器都从驱动节点的 HTTP 服务器下载广播数据,随着集群规模的增长,驱动程序承受的负载会显著增加。
- Torrent Broadcast:
- 驱动程序压力小:驱动程序只需要向一部分执行器发送数据块,之后这些执行器会承担起数据的传播工作。驱动节点的负载大大减轻,尤其是在大规模集群中表现尤为明显。
6. 使用场景
- Http Broadcast:
- 适用于较小规模的集群和广播数据量较小的场景。在这些场景中,驱动程序的负载不会太重,且广播效率能够满足要求。
- Torrent Broadcast:
- 适用于大规模集群和需要频繁广播大量数据的场景。Torrent Broadcast 能更好地利用集群的网络资源,减轻驱动节点的压力,提升整体广播效率。
7. 默认设置
-
Http Broadcast:在 Spark 1.5 版本之前,Spark 默认使用 Http Broadcast 作为广播机制。
-
Torrent Broadcast:自 Spark 1.5 起,Torrent Broadcast 成为默认的广播机制。该机制在大规模分布式计算环境中的性能要远远优于 Http Broadcast。
8. 性能对比
- Http Broadcast:
- 延迟较高:由于所有执行器都从同一源获取数据,当执行器数量较多时,网络拥塞和等待时间会显著增加。
- Torrent Broadcast:
- 延迟较低:通过分块并行传输,多个执行器可以同时接收不同的数据块,并相互之间传递数据,传输效率大大提升,延迟减少。
总结对比表
| 特性 | Http Broadcast | Torrent Broadcast |
|---|---|---|
| 实现方式 | 中央化的 HTTP 服务器传输 | 分布式数据块传输,链式传播 |
| 效率 | 随着集群规模增大,效率迅速下降 | 高效并发,适合大规模集群 |
| 可扩展性 | 可扩展性差 | 可扩展性强,适合大型集群 |
| 网络负载 | 网络负载集中在驱动节点 | 网络负载分散在多个节点之间 |
| 容错性 | 容错性较差,驱动程序故障会导致广播失败 | 容错性强,部分节点故障不会影响整体传播 |
| 驱动程序负担 | 驱动程序负载较高 | 驱动程序负担轻,依赖分布式节点传播 |
| 适用场景 | 小规模集群和小数据集 | 大规模集群和频繁的大数据广播 |
| Spark 默认方式 | Spark 1.5 之前 | Spark 1.5 之后 |
总结
- Http Broadcast 是 Spark 早期采用的广播机制,它简单且适合小规模集群,但随着集群规模的增大,它的效率和可扩展性会显著下降。
- Torrent Broadcast 是更现代的广播机制,通过分块并行传输、分布式传播和链式分发,大大提高了广播数据的传输效率,并且适用于大规模集群的场景。因此,自 Spark 1.5 起,Torrent Broadcast 成为了默认的广播机制。
在大规模分布式计算场景中,Torrent Broadcast 具有明显的性能优势,减少了驱动程序的负载,提升了广播的效率和容错性。
相关文章:
Spark 的 Http Broadcast 和 Torrent Broadcast 广播实现类的对比
在 Apache Spark 中,广播机制用于高效地将小型只读数据分发到集群中的各个执行器(Executor)。Spark 中主要有两种不同的广播实现方式:Http Broadcast 和 Torrent Broadcast。这两种方式的核心目标都是将数据高效地分发给所有工作节…...
030_Subplot_In_Matlab中多图绘制之subplot函数
基于子图的多图方法 专业的论文中通常涉及到多个有逻辑关系的图拼接在一起,构成相互支持或者对照。所以很早之前,Matlab就有这个子图的函数subplot。 这个函数的基本语义有三类: 在图窗上划分出一个矩形区域建立一个坐标系,并指…...
免费云服务器有什么使用限制和注意事项?
在数字化时代,云计算已经成为许多企业和个人用户的重要工具。对于初创企业、开发者和学生来说,免费的云服务器提供了一个低成本的解决方案,使他们能够进行项目开发、学习和实验。但在使用过程中也存在一些限制和注意事项。以下是主要的使用限…...
3-ZYNQ 折腾记录 -PS_PL AXI Interfaces
Zynq UltraScale MPSoC集成了功能丰富的四核或双核Arm Cortex-A53 MPCore基于处理系统(Processing System, PS)和可编程逻辑(Programmable Logic, PL)的单一设备。 PS和PL可以使用多个接口和其他信号进行紧密或松散的耦合。这使设计人员能够有效地将用户创建的硬件加速器和其他…...
总结test
1.IO流 |-- 字节流操作任何类型文件|-- 字符流操作纯字符类文件|-- BIO 传统IO流,阻塞型的,也就是BIO,当执行IO流时,CPU只能等待执行完当前任务,才能去执行其他线程任务|-- NIO非阻塞型IO流,CPU可以同时执行…...
在 On hold 期刊 eLife 上发表一篇生信文章需要什么工作量?
生信碱移 科研圈动态 根据弗雷赛斯以及相关媒体最新消息,中科院一区TOP,著名生命科学期刊 eLife [IF: 6.4]已被科睿唯安官方 On hold! ▲ 官网截图。图片来源:https://mjl.clarivate.com/home eLife是一本专注于生物医学和生命科…...
使用Django框架开发企业级Web应用
💖 博客主页:瑕疵的CSDN主页 💻 Gitee主页:瑕疵的gitee主页 🚀 文章专栏:《热点资讯》 使用Django框架开发企业级Web应用 1 引言 2 Django简介 3 安装Python与Django 4 创建Django项目 5 设计应用结构 6 创…...
认识线程 — JavaEE
目录 认识线程(Thread) 1 线程是什么? 2 为什么要有线程 3 进程和线程的区别 区别一 区别二 区别三 区别四 4. Java的线程和操作系统线程的关系 认识线程(Thread) 1 线程是什么? 一个线程就是一个 "执行流"。…...
【C++单调栈】853. 车队|1678
本文涉及的基础知识点 C单调栈 LeetCode853. 车队 在一条单行道上,有 n 辆车开往同一目的地。目的地是几英里以外的 target 。 给定两个整数数组 position 和 speed ,长度都是 n ,其中 position[i] 是第 i 辆车的位置, speed[i…...
第十届文荣奖华丽开幕,郁葱以青春与努力绽放青年演员光芒
10月27日,第十届文荣奖在众人的期待中盛大开启,内地青年女演员郁葱受邀出席,作为国内颇具影响力的影视奖项,文荣奖一直以来都致力于发掘和表彰优秀的影视作品和青年影视人才,为影视行业的发展注入新的活力,…...
CMake 生成器表达式介绍
【写在前面】 生成器表达式在构建系统生成期间进行评估,以生成特定于每个构建配置的信息。它们的形式为 $<...>。例如: target_include_directories(tgt PRIVATE /opt/include/$<CXX_COMPILER_ID>) 这将扩展为 “/opt/include/GNU”、“/opt…...
ubuntu 20.04编译驱动报gcc-12 not found错误
最近在自己安装的Ubuntu 系统上编译自定义驱动,发现无法编译.ko,错误如下: 按照如下操作,发现可以解决,记录下,主要是Ubuntu缺少g-12的包 安装包以后发现可以正常编译...
docker sameersbn/bind dns服务器
1. 安装 #下载docker 镜像 docker pull sameersbn/bind#运行 53端口若被占用会启动失败 docker run --name dns -d --restartalways \ --publish 53:53/tcp \ --publish 53:53/udp \ --publish 10000:10000/tcp \ -v /etc/localtime:/etc/localtime \ -v /data/bind/:/data \…...
错误:无法推送一些引用到 ‘https://gitee.com/chek_kk/python-electron-app.git‘
这个错误提示说明在提交时某个文件的大小超过了 Gitee 仓库的单文件大小限制(100MB)。你需要从Git 历史中彻底移除这个大文件,否则无法推送到远程仓库。 解决步骤 1. 确认大文件信息 使用以下命令找出超过限制的大文件: git re…...
深度剖析美区代理IP的多元应用与优势
在当今数字时代,代理IP(Proxy IP)已成为互联网使用中的一项关键技术。尤其在美区,代理IP在数据采集、网络安全及在线隐私保护等领域发挥着越来越重要的作用。本文将深入探讨代理IP的基本概念、应用场景以及它带来的诸多优势&#…...
基于KV260的基础视频链路通路(MIPI+Demosaic+VDMA)
目录 1. 简介 1.1 要点 1.2 背景 1.2.1 Got stuck 1.2.2 Cant be Initialized 2. Overlay 2.1 参考 Overlay 2.1.1 KV260 Base 2.1.2 Pynq-CV-OV5640 2.2 自建 Overlay 2.2.1 IIC IP 2.2.2 MIPI CSI-2 Rx 2.2.3 AXI4-S Subset 2.2.4 Demosaic 2.2.5 Pixel Pack …...
Uni-App-04
主页开发 保存主页数据 <script> import { indexData, base } from /serviceexport default {data() {return {base, //把服务器基础地址变量设置为数据属性carousels:[], //轮播广告条目列表menuItems:[], //当前用户选中的功能菜单列表activities:[], //最新的…...
ElasticSearch分片
本文内容参考了田雪松老师编著的《Elastic Stack应用宝典》 ElasticSearch作为一个搜索引擎,会存储海量的数据。而存储海量的数据,就要解决如何存储的问题,并且保证数据不会丢失,同时还需要保证数据检索的效率,尽可能…...
spring高手之路
以下是一些可以快速入门Spring的方法: 1. 学习基础知识 阅读官方文档:Spring官方文档是最权威的学习资料。它详细介绍了Spring的各个模块、概念和使用方法。从核心模块开始,了解如依赖注入(DI)和控制反转(…...
工字钢与H型钢有什么区别?90%的工程师都搞错了!
这里为大家做一个详尽的解答:很多人认为工字钢是国内的叫法,H型钢是国外的叫法,其实这个认知是错误的。H型钢和工字钢从形状上来说是不一样的,见下图: 工字钢 工字钢主要分为普通工字钢、轻型工字钢和宽翼缘工字钢。按…...
利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...
第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...
