Spark SQL优化机制
Spark SQL优化机制
- Spark SQL
- Catalyst 优化器
- 逻辑优化
- 物理优化
- Tungsten
- Unsafe Row
- WSCG
RDD 缺点 : RDD的算子都是高阶函数 ,Spark Core 不知函数内的操作,只能闭包形式发给 Executors, 无法优化
DataFrame 不同点:
- 数据的表示形式 :有数据模式(Data Schema)的结构化数据
- 开发算子 :一套 DSL算子(Domain Specific Language)
Spark 能用 DataFrame ,基于启发式的规则或策略,动态的运行时信息,去优化 DataFrame 的计算过程
Spark SQL
- Spark Core :特指 Spark 底层执行引擎(Execution Engine),包括:调度系统、存储系统、内存管理、Shuffle 管理
- Spark SQL :基于 Spark Core 上,有一层独立的优化引 (Optimization Engine)
Spark Core/Spark SQL关系:
- Spark SQL 优化后的代码,交给 Spark Core 执行

Spark SQL 的两个核心组件:Catalyst 优化器 /Tungsten
- Catalyst 优化器:负责创建并优化执行计划,有 3 个功能模块:创建语法树并生成执行计划、逻辑阶段优化、物理阶段优化
- Tungsten :负责优化数据结果与可执行代码 ,衔接 Catalyst 执行计划与底层的 Spark Core 执行引擎

Catalyst 优化器
Catalyst 优化器的作用:在逻辑优化阶段,基于启发式的规则和策略调整、优化执行计划,为物理优化阶段提升性能奠定基础
逻辑优化
Catalyst 的优化过程 : 先用第三方的 SQL 解析器 ANTLR 生成抽象语法树(AST,AbstractSyntax Tree)
AST 的两个基本元素构成
- 节点:各式各样的操作算子,如 : select、filter、agg
- 边 : 记录了数据表的 Schema 信息 ,如 : 字段名、字段类型
AST 语法树/执行计划(Execution Plan ) :

Parquet 格式在文件层面支持两项特性 :
- 谓词下推、列剪枝 :都是启发式的规则或策略
- 谓词下推 (Predicates Pushdown) :
batchNum >= 201601的过滤条件,在扫描过程时,只读取那些满足条件的数据文件 - 列剪枝 (Columns Pruning):Parquet 是列存 (Columns Store) 数据结构,只取某个字段名的数据文件时,就会剪掉其他数据文件的过程
Spark 只扫描绿色部分 :

逻辑优化的执行计划 :
- 执行顺序 :
Scan > Filter > Select变成Filter > Select > Scan

物理优化
Catalyst 的优化阶段差异:
- 逻辑阶段 :依赖先验的启发式经验 , 基于经验优化
- 物理阶段:依赖各式各样的统计信息,如:数据表尺寸、是否启用数据缓存、Shuffle 中间文件, 基于数据优化
Join 节点物理阶段优化:
- 采用哪种实现机制实现关联:嵌套循环连接(NLJ,Nested Loop Join)、排序归并连接(Sort Merge Join)、哈希连接(Hash Join)
- 采用哪种数据分发实现关联:Shuffle Join 和 Broadcast Join
- 根据两张表的存储大小,决定采用 :运行稳定但性能略差的 Shuffle Sort Merge Join 或 执行性能更佳的 Broadcast Hash Join
Tungsten
基于Catalyst ,Tungsten 在数据结构/执行代码进行进一步的优化
- 数据结构优化: Unsafe Row 的设计与实现
- 执行代码优化:全阶段代码生成(WSCG,Whole Stage Code Generation)
Unsafe Row
Spark SQL 默认采用 org.apache.spark.sql.Row 对象对每条数据进行封装和存储,Java Object 会有大量的存储开销
Unsafe Row 是二进制数据结构,以字节数组的格式存储每条数据,能减少存储开销
采用默认的 Row存储:
- 每条记录需要消耗至少 60 个字节

采用 Tungsten Unsafe Row 存储:
- 每条数据记录仅需消耗十几个字节

WSCG
WSCG:全阶段代码生成
- 全阶段:调度系统中的 Stage
- 代码生成:运行时,把链式调用的算子合成一份代码。如:把
Filter、Select、Scan合成一个函数
绿色节点属于同一个 Stage :

相关文章:
Spark SQL优化机制
Spark SQL优化机制Spark SQLCatalyst 优化器逻辑优化物理优化TungstenUnsafe RowWSCGRDD 缺点 : RDD的算子都是高阶函数 ,Spark Core 不知函数内的操作,只能闭包形式发给 Executors, 无法优化 DataFrame 不同点: 数据的表示形式…...
十五、Spring中的八大模式
1 简单工厂模式 BeanFactory的getBean()方法,通过唯一标识来获取Bean对象。是典型的简单工厂模式(静态工厂模式); 2 工厂方法模式 FactoryBean是典型的工厂方法模式。在配置文件中通过factory-method属性来指定工厂方法&#x…...
GrabCut算法、物体显著性检测
图割GraphCus算法。利用颜色、纹理等信息对GraphCut进行改进,形成效果更好的GrabCut算法。 对图像的目标物体和背景建立一个K维的全协方差高斯混合模型。 其中,单高斯模型的概率密度函数用公式表示为: 高斯混合模型可表示为n个单高斯模型的概…...
亚马逊、速卖通、lazada店铺一直不出单,没流量怎么办?
近几年,跨境电商入驻的卖家越来越多,平台的流量越来越分散,导致店铺没有流量没有订单的情况经常发生,因此卖家对店铺的优化尤为主要。 对于亚马逊卖家来说,几乎每天都会问虽然我把我的产品放在货架上,但没…...
深度剖析C语言符号篇
致前行的人: 人生像攀登一座山,而找寻出路,却是一种学习的过程,我们应当在这过程中,学习稳定冷静,学习如何从慌乱中找到生机。 目录 1.注释符号: 2.续接符和转义符: 3.回车与换行…...
【学习总结】ORBSLAM3使用自己相机数据
本文仅用于自己学习总结。本文档记录如何修改ORBSLAM3的接口,用自己的图片和数据。 单目视觉,无IMU,离线数据运行的配置过程 euroc_examples.sh 首先从euroc_examples.sh这个运行指令改。这个文件在最新版的代码中被删掉了,但通…...
C++单例模式实现
目录 1.提出的需求 2.如何定义一个类,使得这个类最多只能创建一个对象? 3.代码 4.小结 C/CLinux服务器开发/后台架构师【零声教育】-学习视频教程-腾讯课堂 1.提出的需求 在架构设计时&am…...
343. 整数拆分
343. 整数拆分 给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k > 2 ),并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 示例 1: 输入: n 2 输出: 1 解释: 2 1 1, 1 1 1。示例 2: 输入: n 10 输出: 36…...
SCAFFOLD: Stochastic Controlled Averaging for Federated Learning学习
SCAFFOLD: Stochastic Controlled Averaging for Federated Learning学习背景贡献论文思想算法局部更新方式全局更新方式实验总结背景 传统的联邦学习在数据异构(non-iid)的场景中很容易产生“客户漂移”(client-drift )的现象,这会导致系统的收敛不稳定或者缓慢。…...
第十四届蓝桥杯三月真题刷题训练——第 3 天
目录 题目1:门牌制作 题目描述 运行限制 代码: 题目2:货物摆放_long 题目描述 答案提交 运行限制 代码: 题目3:跳跃_dp 题目描述 输入描述 输出描述 输入输出样例 运行限制 代码: 题目4&a…...
变量的四大存储类型static extern auto register
变量的四大存储类型static extern auto register外部变量(全局变量)extern----全局静态存储区定义 引用性声明❗易错点:函数之外未定义的变量一般是外部变量 extern全局变量 与 局部变量的区别‼️ 谨记:声明可以多次,…...
JavaScript基础五、语句
零、文章目录 文章地址 个人博客-CSDN地址:https://blog.csdn.net/liyou123456789个人博客-GiteePages:https://bluecusliyou.gitee.io/techlearn 代码仓库地址 Gitee:https://gitee.com/bluecusliyou/TechLearnGithub:https:…...
青龙面板399乐园
1.拉库 ql raw https://wjkjy.cn/wp-content/uploads/2023/03/1678104978-afaecb98a9df61e.js 2.抓包 7.26 399乐园 每天 七八毛左右 脚本已完成全部任务,自动提现 下载链接:https://3mao.lanzoul.com/izGDh084oogh 抓包链接 https://339.mhhuanyue.c…...
自动化注册组件
// components/index.js export default { install(app) { const req require.context(‘./’, false, /.vue$/) // console.log(req, ‘req’) req.keys().forEach((item) > { // console.log(item, ‘item’) const com req(item).default // console.log(com, ‘com’)…...
【JS代码优化一】分支优化篇
序:如何让代码看起来更优雅?代码是由文字堆叠起来的可以被机器执行的程序。它记载着相关信息(状态)、表达相关的情绪(函数),所以如何能够写出简洁、优雅、健壮、可维护性强的程序至关重要。本系…...
软件测试-接口测试-补充
文章目录 1.持续集成2. mock测试3.Fiddler 抓包工具3.1 弱网测试4. webservice1.持续集成 持续集成概念 重复执行开发提交代码并集成到主干; aim 加速产品迭代 好处 快速发现问题 避免分支大幅度偏离主干 加速产品发布 工具 git:源代码版本工具github:代码仓库jenkins:持续…...
Spring笔记(5):Beans自动装配
为什么需要使用自动装配 在通过XML配置文件进行设置Bean元素注入与声明注册后,我们能够发现一个问题,在项目中是会存在大量对象的,不可能全部都写在XML文件中,那会显得非常的臃肿,不利于后期维护,所以需要用…...
Spark+Vue+Springboot 协同过滤额音乐推荐大数据深度学习项目
一、项目背景 随着互联网的发展,大数据的到来,传统的音乐行业受到了很大的冲击,原有的音乐数字化给人们生活带来了极大的便利。随着数字音乐的兴起,各大音乐平台层出不穷,人们在音乐平台上收听音乐的时,常常因为歌曲信息繁杂,而不能找到自己想听的音乐。为了解决这个问题,音乐…...
JDBC的实现(IDEA版)
前期准备 开发环境: IDEA 2021.1.3 JAVA 1.8 MYSQL 8.0.32 msql用户名:root 密码:123 下载MySQL JDBC 驱动 前往MySQL官网下载对应版本的MySQL Connector/J驱动 (下载地址:https://dev.mysql.com/downloads/connector/j/ÿ…...
人员摔倒识别预警系统 人员跌倒检测算法 yolov7
人员摔倒识别预警系统 人员跌倒检测算法基于yolov7网络模型计算机识别技术,人员摔倒识别预警系统 人员跌倒检测算法对画面中人员摔倒进行实时检测识别抓拍告警。YOLOv7 的策略是使用组卷积来扩展计算块的通道和基数。研究者将对计算层的所有计算块应用相同的组参数和…...
【数字信号检测】迫零算法大规模MIMO低复杂度信号检测【含Matlab源码 15237期】
💥💥💥💥💥💥💥💥💞💞💞💞💞💞💞💞💞Matlab领域博客之家💞&…...
重构macOS开发流程:OpenInTerminal如何提升开发者环境切换效率
重构macOS开发流程:OpenInTerminal如何提升开发者环境切换效率 【免费下载链接】OpenInTerminal ✨ Finder Toolbar app for macOS to open the current directory in Terminal, iTerm, Hyper or Alacritty. 项目地址: https://gitcode.com/gh_mirrors/op/OpenInT…...
FPGA实战:单总线协议解析与DHT11温湿度数据采集
1. 从零认识DHT11温湿度传感器 第一次拿到DHT11这个白色小方块时,我完全没想到这么便宜的传感器能有如此实用的功能。作为一款经典的数字温湿度复合传感器,DHT11通过单总线协议输出校准后的数字信号,省去了传统模拟传感器需要的ADC转换环节。…...
MPO光纤跳线:从结构解析到数据中心高密度布线实战
1. MPO光纤跳线:高密度布线的秘密武器 第一次接触MPO光纤跳线时,我被它的"小身材大容量"震惊了。这个看起来和普通SC连接器差不多大小的家伙,居然能塞下12根甚至24根光纤!这就像在普通U盘大小的空间里装下了整个移动硬盘…...
收藏!阿里放大招成立ATH事业群,AI月薪6W+,小白/程序员入局正当时
近日,据行业网友爆料,阿里近期迎来AI领域重大动作——正式组建Alibaba Token Hub(简称ATH)事业群,由集团CEO吴某铭亲自挂帅带队,其核心战略目标十分明确,浓缩为一句话就是:创造Token…...
Hasklig字体终极指南:多语言编程环境中的完美适配方案
Hasklig字体终极指南:多语言编程环境中的完美适配方案 【免费下载链接】Hasklig Hasklig - a code font with monospaced ligatures 项目地址: https://gitcode.com/gh_mirrors/ha/Hasklig Hasklig是一款专为程序员设计的等宽字体,通过智能连字技…...
WPF Chart控件实战:构建高性能实时数据监控曲线
1. WPF Chart控件基础入门 第一次接触WPF Chart控件时,我也被它强大的功能震撼到了。这个控件就像是一个神奇的画板,能够将枯燥的数据变成直观的曲线图。在工业监控系统中,我们经常需要实时显示温度、压力等参数的变化趋势,这时候…...
OpenClaw技能市场探索:GLM-4.7-Flash加持的10个实用插件
OpenClaw技能市场探索:GLM-4.7-Flash加持的10个实用插件 1. 为什么需要关注OpenClaw技能市场? 当我第一次接触OpenClaw时,最让我惊喜的不是它的基础功能,而是它丰富的技能市场生态。作为一个长期使用各类自动化工具的技术爱好者…...
【数字逻辑】实战解析:从PLD到FPGA的演进与应用场景
1. 可编程逻辑器件的技术演进之路 第一次接触可编程逻辑器件是在大学实验室里,当时看着老师用一个小芯片就实现了整个数字钟的功能,完全颠覆了我对传统电路板的认知。这种"魔术般"的芯片就是PLD(可编程逻辑器件)&#…...
如何7天免费使用Cursor Pro:无限制AI编程助手完整指南
如何7天免费使用Cursor Pro:无限制AI编程助手完整指南 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your tri…...
