Spark性能调优之广播变量

2023-11-13

一、背景
举例来说,(虽然是举例,但是基本都是用我们实际在企业中用的生产环境中的配置和经验来说明的)。50个executor,1000个task。一个map,10M。

默认情况下,1000个task,1000份副本。10G的数据,网络传输,在集群中,耗费10G的内存资源。
如果使用了广播变量。50个execurtor,50个副本。500M的数据,网络传输,而且不一定都是从Driver传输到每个节点,还可能是就近从最近的节点的executor的bockmanager上拉取变量副本,网络传输速度大大增加;500M的内存消耗。

10000M,500M,20倍。20倍~以上的网络传输性能消耗的降低;20倍的内存消耗的减少。
对性能的提升和影响,还是很客观的。

虽然说,不一定会对性能产生决定性的作用。比如运行30分钟的spark作业,可能做了广播变量以后,速度快了2分钟,或者5分钟。但是一点一滴的调优,积少成多。最后还是会有效果的。

没有经过任何调优手段的spark作业,16个小时;三板斧下来,就可以到5个小时;然后非常重要的一个调优,影响特别大,shuffle调优,2-3个小时;应用了10个以上的性能调优的技术点,JVM+广播,30分钟。16小时~30分钟。

二、流程图示
在这里插入图片描述

                 传统task分发示意图

如果说,task使用大变量(1m~100m),明知道会导致性能出现恶劣的影响。那么我们怎么来解决呢?
广播,Broadcast,将大变量广播出去。而不是直接使用

Question
这种默认的,task执行的算子中,使用了外部的变量,每个task都会获取一份变量的副本,有什么缺点呢?在什么情况下,会出现性能上的恶劣的影响呢?
Answer
1、map,本身是不小,存放数据的一个单位是Entry,还有可能会用链表的格式的来存放Entry链条。所以map是比较消耗内存的数据格式。

2、比如,map是1M。总共,你前面调优都调的特好,资源给的到位,配合着资源,并行度调节的绝对到位,1000个task。大量task的确都在并行运行。

3、这些task里面都用到了占用1M内存的map,那么首先,map会拷贝1000份副本,通过网络传输到各个task中去,给task使用。总计有1G的数据,会通过网络传输。网络传输的开销,不容乐观啊!!!网络传输,也许就会消耗掉你的spark作业运行的总时间的一小部分。

4、map副本,传输到了各个task上之后,是要占用内存的。1个map的确不大,1M;1000个map分布在你的集群中,一下子就耗费掉1G的内存。对性能会有什么影响呢?

5、不必要的内存的消耗和占用,就导致了,你在进行RDD持久化到内存,也许就没法完全在内存中放下;就只能写入磁盘,最后导致后续的操作在磁盘IO上消耗性能;

6、你的task在创建对象的时候,也许会发现堆内存放不下所有对象,也许就会导致频繁的垃圾回收器的回收,GC。GC的时候,一定是会导致工作线程停止,也就是导致Spark暂停工作那么一点时间。频繁GC的话,对Spark作业的运行的速度会有相当可观的影响。
在这里插入图片描述

                 广播变量分发Task

Answer
广播变量,初始的时候,就在Drvier上有一份副本。
task在运行的时候,想要使用广播变量中的数据,此时首先会在自己本地的Executor对应的BlockManager中,尝试获取变量副本;如果本地没有,那么就从Driver远程拉取变量副本,并保存在本地的BlockManager中;此后这个executor上的task,都会直接使用本地的BlockManager中的副本。

executor的BlockManager除了从driver上拉取,也可能从其他节点的BlockManager上拉取变量副本,举例越近越

BlockManager,也许会从远程的Driver上面去获取变量副本;也有可能从距离比较近的其他节点的Executor的BlockManager上去获取。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spark性能调优之广播变量 的相关文章

  • 在 Java 正则表达式中获取多个模式的重叠匹配

    我有同样的问题这个链接 https stackoverflow com questions 18751486 matching one string multiple times using regex in java 但有多种模式 我的正
  • 在 jTextfield 中禁用“粘贴”

    我有一个用 Swing awt 编写的应用程序 我想阻止用户将值粘贴到文本字段中 有没有办法在不使用动作监听器的情况下做到这一点 您可以使用 null 参数调用 setTransferHandler 如下所示 textComponent s
  • 如何作为应用程序发布到页面?

    所以 我有一个应用程序 Facebook 应用程序实体 并且我有一个页面 我想使用应用程序通过java代码 通过restfb或任何其他建议 发布到页面 看起来我错过了页面授予应用程序发布权限的阶段 不知道该怎么做 谢谢你们 乌里 您只能 作
  • 查询 MongoDB 集合中的字段。

    我正在尝试查询 mongodb 集合中的特定字段 这是我的代码和输出 Mongo m new Mongo DB db m getDB mydb DBCollection coll db getCollection student addin
  • 本地开发的 Azure Functions 扩展包版本问题

    我有一个带有队列触发器的 Java 11 Azure 函数 该函数在部署到 Azure 时按预期工作 并正确从定义的服务总线主题中提取消息 但是 运行相同的功能locally除非我回滚版本 否则不起作用Azure Functions 绑定扩
  • 在哪里保存选项值、重要文件的路径等[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在创建一个程序 需要设置一些选项值以及图像文件的一些路径 SQLite 数据库的路径 有关各种按钮上文本的一些信息 有关要使用哪个数据库的信
  • 如何在 HandlerInterceptorAdapter 中添加 HttpServletRequest 标头?

    我正在尝试将授权标头添加到我的请求中 作为我们切换环境时的临时解决方法 我试图在扩展 HandlerInterceptorAdapter 的拦截器中处理它 我使用 MutableHttpServletRequest 类制作here http
  • 无法在 Java 中输出正确的哈希值。怎么了?

    在我的 Android 应用程序中 我有一个 SHA256 哈希值 我必须使用 RIPEMD160 消息摘要算法进一步对其进行哈希值 我可以输出任何字符串的正确 sha256 和ripemd160 哈希值 但是当我尝试使用ripemd160
  • 确定序列化对象的类型

    我需要通过套接字发送消息 从用户到引擎的请求 以及从引擎到用户的响应 所以流程本质上是 serialized request Server lt network gt Client serialized response request r
  • 在grails控制器中识别ajax请求或浏览器请求

    我正在开发一个使用大量ajax的grails应用程序 如果请求是ajax调用 那么它应该给出响应 这部分正在工作 但是如果我在浏览器中输入URL 它应该带我到主页 索引页面而不是请求的页面 下面是ajax调用的示例gsp代码
  • 在 Java 中创建 XML 文件的最佳方法是什么?

    我们目前使用 dom4j 来创建 XML 文件 不过 我猜现在有更好的东西了 如果我们使用的是 Java 1 6 或更高版本 那么在编写 XML 文件时最好使用什么类 运行速度最快 使用简单 我不需要构建一个 DOM 然后编写整个 DOM
  • 如何从字符串中解析一个大整数? [复制]

    这个问题在这里已经有答案了 我有一个这样的方法 Integer parseInt myInt 不是这个整数变得很长 我得到以下异常 java lang NumberFormatException For input string 40001
  • 如何从intellij项目视图中隐藏不必要的文件?

    给定一个示例 gradle 项目 其项目结构如下所示 正如你所看到的 有很多东西你实际上不需要在想法中看到 但你需要它们存在 我知道下面被忽略的文件 文件夹类型Editor File Types但这些正在影响库和项目 idea 会在各处忽略
  • Java 中 JButton 的击键/热键

    最初我使用 JMenu 并建立热键以使用加速器工作 它运行得很好 现在我想在 JButton 中实现相同的行为 但我陷入困境 这是我编写的代码 请分享您的想法 以便我可以走上正确的道路 import javax swing import j
  • 使用单独的线程在java中读取和写入文件

    我创建了两个线程并修改了 run 函数 以便一个线程读取一行 另一个线程将同一行写入新文件 这种情况会发生直到整个文件被复制为止 我遇到的问题是 即使我使用变量来控制线程一一执行 但线程的执行仍然不均匀 即一个线程执行多次 然后控制权转移
  • 如何减去两个 XmlGregorianCalendar 对象来创建一个 Duration 对象?

    我想计算两个时间之间的差值XmlGregorianCalendar对象 从而创建一个Duration object 但我还没有找到执行减法的干净方法 你会怎么做 那应该是 DatatypeFactory newDuration xgc2 t
  • 当底层连接是有状态时如何使用 Apache HttpClient?

    我在谷歌上搜索了很多关于如何使用 HttpClient 进行多线程处理的信息 他们中的大多数人建议使用 ThreadSafeClientConnManager 但我的应用程序必须登录某个主机 登录表单页面 以便 HttpClient 获得底
  • 如何在 O(n) 时间内根据 Map 中的整数值相对于其他值随机选择一个键?

    如果我们有一个Map
  • javax.media.jai 类的公共下载?

    这是一个非常简单的问题 我一直在寻找可以下载 javax media jai 库的地方 我找到了 jai imageio 库 但是我发现的所有其他 jai 内容要么已经过时 2008 年及之前 然后我遇到了登录屏幕 是否有 javax me
  • java.lang.IllegalStateException - 提交响应后无法创建会话

    我在我的项目中使用 JSF PrimeFaces 我为此准备了一个Maven项目 当我编译项目并加载主页后 我收到以下异常 java lang IllegalStateException Cannot create a session af

随机推荐

  • redis的Cacheable注解介绍

    1 引入依赖
  • Webpack 5 新特性

    Webpack 5 在2020年10月正式发布 更新的内容比较多 我们从头梳理下本次更新的核心内容 文章目录 一 构建优化 1 Tree Shaking 删除无用代码 2 合并模块 concatenateModules 3 副作用 side
  • 制度汇编格式怎么生成目录_怎么用word制作标书?大神般操作经验在这里

    怎么用word制作标书 word制作标书是每一个制作标书的制标员 如何用我们常用的办公软件来制作标书呢 除了将必要的材料编写入里面 还需要注意格式 字体等固定排版问题 如果你还是一枚制作标书的新人 请一起来和保标招标网小编学习怎么用word
  • python常用内置库时间,日期与JSON转换

    日期与时间 datetime是Python处理日期和时间的标准库 from datetime import datetime if name main cur date datetime now print cur date print c
  • jenkins使用root账号

    1 修改配置文件 编辑配置文件 vim etc sysconfig jenkins 修改 JENKINS USER JENKINS USER root 2 修改相关文件夹为root权限 chown R root root var lib j
  • 数据仓库-数据分层理论详解

    主题 Subject 是在较高层次上将企业信息系统中的数据进行综合 归类和分析利用的一个抽象概念 每一个主题基本对应一个宏观的分析领域 在逻辑意义上 它是对应企业中某一宏观分析领域所涉及的分析对象 例如 销售分析 就是一个分析领域 因此这个
  • 蓝桥杯2017届C++B组省赛真题 分巧克力

    儿童节那天有K位小朋友到小明家做客 小明拿出了珍藏的巧克力招待小朋友们 小明一共有N块巧克力 其中第i块是Hi x Wi的方格组成的长方形 为了公平起见 小明需要从这 N 块巧克力中切出K块巧克力分给小朋友们 切出的巧克力需要满足 1 形状
  • 1、常用DOS命令大全

    一 DOS DiskOperatingSystem 磁盘操作系统 特点 单任务 单用户系统 使用命令行方式 控制计算机 二 DOS命令行的组成 1 DOS命令行中的基本概念 当前驱动器 当前盘 当前目录 相对路径 绝对路径 2 DOS命令的
  • 基于点云的3D障碍物检测

    基于点云的3D障碍物检测 主要有以下步骤 点云数据的处理 基于点云的障碍物分割 障碍物边框构建 点云到图像平面的投影 点云数据的处理 KITTI数据集 KITTI数据集有四个相机 主要使用第三个相机 序号为02 拍摄的图片 标定参数和标签文
  • I/O管理及监控命令

    一 磁盘原理 简单理解 1 盘片以每分钟数千转到上万转的速度在高速旋转 15K 10K 7 5K 5 2K RPM 2 磁头就能对盘片上的指定位置进行数据的读写操作 3 磁头磁化磁盘记录数据 4 从外到里存储 外快内慢 5 以扇区为单位存储
  • python-selenium-动作链拖拽;cookies处理

    1 动作链拖拽 导入动作链需要的包 from selenium webdriver import ActionChains 具体步骤 1 创建动作链对象 并绑定给浏览器 action ActionChains driver 2 点击并长按指
  • 停止IIS服务

    1 第一步 停止 World Wide Web Publishing Service 这个是W3C服务 2 第二部 停止 IIS Admin Service 这个IIS元数据管理服务 转载于 https www cnblogs com xi
  • 非接触IC卡中typeA卡和typeB卡的区别--总结,二者的调制方式和编码方式不同

    1 非接触式IC卡的国际规范ISO IEC14443的由来 在非接触式IC卡的发展过程中 这些问题逐渐被解决并形成通用的标准 体现在现在的射频IC卡的设计上 国际标准化组织 ISO 和国际电子技术委员会 IEC 为期制定了相应的非接触式IC
  • 虚拟主机的配置

    三种虚拟主机的配置 开启apache服务 编写环境变量 root localhost vim etc profile d httpd sh export PATH usr local apache bin PATH root localho
  • kettle表数据比较

    使用合并记录组件 我的kettle死活不能保存中文 唉 其中tab in 1和tab in 2代表两个数据源 合并记录 新旧数据源可随意指定 获取需要对比的字段 此处为了对比将比较记录先放在file中 identical 比较的所有字段相同
  • PPTP - GRE

    PPTP GRE PPTP Point to Point Tunneling Protocol 点对点隧道协议 GRE Generic Routing Encapsulation 通用路由封装 PPTP 的连接过程如下图 PPTP 可以用于
  • Python和Java读写文件的对比

    博主平时用Python比较多 最近因为工作需要使用Java编程 比较之下 发现Python读写文件真是太方便了 Java读写文件非常繁琐 简直让人抓狂 Python读写文件的语句 读文件 with open readFile r as in
  • 小程序实现毛玻璃的效果

    利用css的filter这个属性实现 在有弹框弹出的时候背景出现高斯模糊的效果 写个小例子记录一下 这个是背景是地图的情况下 做的处理 不管是文字还是图片什么的 在弹出框出来的时候给背景添加filter blur 20rpx 中间值的模糊程
  • Linux虚拟机sqlite数据库安装教程、命令实现sqlite

    参考 Linux虚拟机sqlite数据库安装教程 作者 图触靓 发布时间 2021 04 08 19 07 56 网址 https blog csdn net bhbhhyg article details 115528254 一 在官网下
  • Spark性能调优之广播变量

    一 背景 举例来说 虽然是举例 但是基本都是用我们实际在企业中用的生产环境中的配置和经验来说明的 50个executor 1000个task 一个map 10M 默认情况下 1000个task 1000份副本 10G的数据 网络传输 在集群