当前位置: 首页 > news >正文

Spark - Spark SQL中RBO, CBO与AQE简单介绍

Spark SQL核心是Catalyst, Catalyst执行流程主要分4个阶段, 语句解析, 逻辑计划与优化, 物理计划与优化, 代码生成
前三个阶段都由Catalyst负责, 其中, 逻辑计划的优化采用RBO思路, 物理计划的优化采用CBO思路

RBO (Rule Based Optimization)

基于规则优化, 通过一系列预定好的规则(Rule)对逻辑计划进行等价转换, 以提高查询效率
两个主要思路

  • 减少参与计算的数据量
  • 降低重复计算的代价

常用的规则都基于经验指定, 可覆盖大部分查询场景, 且方便扩展, 缺点是不够灵活
常用规则例如

  • 常量折叠(ConstantFolding)
    把纯常量运算表达式预先转化, 比如把1+2转化为3.0, 消除不必要的重复计算

  • 谓词下推(PushdownPredicate)
    最常见的用于减少参与计算的数据量的方法
    谓词, where条件, join on中的过滤条件
    将SQL语句中的谓词逻辑尽量提前执行, 参与join的数据量大大减少, 使得join操作速度大大提高

  • 列裁剪(ColumnPruning)
    在扫描表时, 只筛选出符合后续逻辑计划的最小列集合, 节省掉扫描全部列的资源
    如果使用的Parquet,ORC等列式存储格式持久化的, 效率会更高

CBO (Cost Based Optimization)

基于代价优化
CBO优化主要在物理计划层, 原理是计算所有可能的物理计划的代价, 并挑选出代价最小的计划
充分考虑了数据本身的特点(大小, 分布)以及操作算子的特点(中间结果集的分布及大小)及代价, 从而更好的选择执行代价最小的计划

物理执行计划是一个树状结构, 其代价等于每个执行节点的代价总和
每个执行节点的代价, 分为两个部分

  1. 该执行节点对数据集的影响, 即该节点输出数据集的大小与分布, 又分为两个部分
    • 初始数据集, 其大小与分布可直接通过统计得到
    • 中间节点输出数据集的大小与分布, 可由其输入数据集的信息与操作本身的特点推算
  2. 该执行节点操作算子的代价, 相对固定, 可用规则来描述

CBO优化有, Build侧选择, 优化Join类型, 优化多表Join顺序

CBO的问题
数据统计信息普遍缺失, 统计信息的收集代价较高
储存计算分离的架构, 使得收集到的统计信息可能不再准确
Spark部署在某个单一硬件架构上, cost很难被估计
Spark的UDF简单易用, 种类繁多, 但是对于CBO来说是黑盒, 无法估计cost

AQE (Adaptive Query Execution)

CBO是一种静态优化策略, 一旦执行计划交付运行, 就不能再对物理计划进行修改
在分布式系统中使用CBO是一个极其复杂的问题, 在Spark中收集和维护一组准确和最新的统计数据是昂贵的

AQE是Spark SQL的一种动态优化机制, 在运行时, 每当Shuffle Map阶段执行完毕, AQE都会
结合这个阶段的统计信息, 基于既定的规则动态的调整, 修正尚未执行的逻辑计划和物理计划, 来
完成对原始查询语句的运行时优化

AQE的统计信息与CBO不同, 不是关于表, 而是Shuffle Map阶段输出的中间文件
AQE从运行时获取统计信息, 在条件允许的情况下, 优化决策会分别作用到逻辑计划和物理计划

AQE三大特性

  • 自动分区合并
    在Shuffle过后, Reduce Task数据分布参差不齐, AQE将自动合并过小的数据分区

  • Join策略调整
    如果某张表在过滤后, 尺寸小于广播变量阈值, 这张表参与的Join就会从Shuffle Sort
    Merge Join 降级为执行效率更高的Broadcast Hash Join

  • 自动倾斜处理
    结合配置项, AQE自动拆分Reduce阶段过大的数据分区, 降低单个Reduce Task的工作负载

参考文献

CBO探究
Spark AQE新特性
CBO 基于代价的优化
Catalyst 内部原理 与 RBO

相关文章:

Spark - Spark SQL中RBO, CBO与AQE简单介绍

Spark SQL核心是Catalyst, Catalyst执行流程主要分4个阶段, 语句解析, 逻辑计划与优化, 物理计划与优化, 代码生成 前三个阶段都由Catalyst负责, 其中, 逻辑计划的优化采用RBO思路, 物理计划的优化采用CBO思路 RBO (Rule Based Optimization) 基于规则优化, 通过一系列预定好…...

NeurIPS/ICLR/ICML AI三大会国内高校和企业近年中稿量完整统计

点击文末公众号卡片,找对地方,轻松参会。 近日,有群友转发了一张网图,统计了近年来中国所有单位在NeurIPS、ICLR、ICML论文情况。原图如下: 中稿数100: 清华(1) 北大(2) 占比:22.6%。 累计数…...

Android IO 框架 Okio 的实现原理,到底哪里 OK?

本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 提问。 前言 大家好,我是小彭。 今天,我们来讨论一个 Square 开源的 I/O 框架 Okio,我们最开始接触到 Okio 框架还是源于 Square 家的 OkHttp 网络…...

一文讲解Linux 设备模型 kobject,kset

设备驱动模型 面试的时候,有面试官会问,什么是Linux 设备驱动模型?你要怎么回答? 这个问题,突然这么一问,可能你会愣住不知道怎么回答,因为Linux 设备驱动模型是一个比较整体的概念&#xff0…...

linux配置密码过期的安全策略(/etc/login.defs的解读)

长期不更换密码很容易导致密码被破解,而linux的密码过期安全策略主要在/etc/login.defs中配置。一、/etc/login.defs文件的参数解读1、/etc/login.defs文件的内容示例[rootlocalhost ~]# cat /etc/login.defs # # Please note that the parameters in this configur…...

c_character_string 字符串----我认真的弄明白了,也希望你们也是。

字符串 1. 字符串长度strlen 1.1strlen 函数介绍 size_t strlen ( const char * str );strlen ——string length strlen 的头文件是 #include <string.h> 参数指向的字符串必须要以 ‘\0’ 结束。 strlen 是求字符串长度的函数&#xff0c;统计的是字符串中\0之前出现…...

spring面试题 一

一、为了降低Java开发的复杂性&#xff0c;Spring采取了那4种关键策略 基于POJO的轻量级和最小侵入性编程&#xff1b; 通过依赖注入和面向接口实现松耦合&#xff1b; 基于切面和惯例进行声明式编程&#xff1b; 通过切面和模板减少样板式代码。 二、Spring框架的核心&am…...

C++中char *,char a[ ]的特殊应用

1.数组的本质 数组是多个元素的集合&#xff0c;在内存中分布在地址相连的单元中&#xff0c;所以可以通过其下标访问不同单元的元素。 2.指针 指针也是一种变量&#xff0c;只不过它的内存单元中保存的是一个标识其他位置的地址。 3.字符串常量的本质是它的第一个字符的地…...

【Windows10】电脑副屏无法调节屏幕亮度?解决方法

先说下情况&#xff0c;本人对显示器不太懂&#xff0c;属于小白 这个副屏无法调节的问题出现也已经很久了&#xff0c;但是之前亮度适合就无所谓&#xff0c;今天突然按了之后很亮&#xff0c;于是就找问题。 第一步&#xff0c;我直接百度&#xff0c;遇事不决&#xff0c;百…...

Paper简读 - ProGen2: Exploring the Boundaries of Protein Language Models

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/128976102 ProGen2: Exploring the Boundaries of Protein Language Models ProGen2:探索蛋白质语言模型的边界Cumulative density:累积密度 Ligand:在生…...

leaflet 加载WKT数据(示例代码050)

第050个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中加载WKT文件,将图形显示在地图上。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果; 注意如果OpenStreetMap无法加载,请加载其他来练习 文章目录 示例效果配置方式示例源代码(共67行…...

设计模式-组合模式和建筑者模式详解

一. 组合模式 1. 背景 在现实生活中&#xff0c;存在很多“部分-整体”的关系&#xff0c;例如&#xff0c;大学中的部门与学院、总公司中的部门与分公司、学习用品中的书与书包、生活用品中的衣月艮与衣柜以及厨房中的锅碗瓢盆等。在软件开发中也是这样&#xff0c;例如&…...

Pcap文件的magic_number

1. 简述 pcap文件头中的magicNum是来标识pcap文件文件头和包头字节序和应用是否一致的。 在标准情况下为0xa1b2c3d4。如果相反则说明需要调换字节序。 一般格式 Global Header Packet Header Packet Data Packet Header Packet Data ....pcap文件头格式 typedef struct pca…...

MDS75-16-ASEMI三相整流模块MDS75-16

编辑-Z MDS75-16在MDS封装里采用的6个芯片&#xff0c;是一款工业焊机专用大功率整流模块。MDS75-16的浪涌电流Ifsm为920A&#xff0c;漏电流(Ir)为5mA&#xff0c;其工作时耐温度范围为-40~150摄氏度。MDS75-16采用GPP硅芯片材质&#xff0c;里面有6颗芯片组成。MDS75-16的电…...

基本TCP编程

1. 基本概念 TCP (即传输控制协议) 是一种面向连接的传输层协议,它能提供高可靠性通信 (即数据无误、数据无丢失、数据无失序、数据无重复到达的通信)。 2. 通信流程解析 TCP 通信的流程与打电话的过程相似,以下以一对情侣打电话的过程来展示TCP的通信流程: 其中服务端 …...

【沁恒WCH CH32V307V-R1开发板读取板载温度实验】

【沁恒WCH CH32V307V-R1开发板读取板载温度实验】1. 前言2. 软件配置2.1 安装MounRiver Studio3. ADC项目测试3.1 打开ADC工程3.2 编译项目4. 下载验证4.1 接线4.2 演示效果5. 小结1. 前言 ADC 模块包含 2 个 12 位的逐次逼近型的模拟数字转换器&#xff0c;最高 14MHz 的输入时…...

学习SpringCloudAlibaba(二)微服务的拆分与编写

目录 一、单体架构VS微服务架构 1.单体架构 ​&#xff08;1&#xff09;.单体架构的优点 &#xff08;2&#xff09;.单体架构的缺点 2.微服务架构 &#xff08;1&#xff09;微服务的特性 &#xff08;2&#xff09;微服务架构图 &#xff08;3&#xff09;微服务的优点 …...

通过对HashMap的源码分析解决部分关于HashMap的问题

HashMap第一次分配多大的空间我们查看resize&#xff08;)中的源码所以当我们没有传入默认容量的参数的时候&#xff0c;默认容量是16当传进一个20的初始参数时&#xff0c;数组的容量是多大所以当我们传入20的参数&#xff0c;这时创建的容量是32&#xff08;2^5&#xff09;对…...

【无标题】

Windeployqt 打包,缺少DLL 的原因分析,解决方法 很多同学使用工具windeployqt进行打包发布后,运行exe文件时,还是会出现下图所示的系统错误提示,这种情况就表示相关的DLL 库文件没有被正确打包。可是windeployqt明确显示运行正常啊,难道是QT自家的windeployqt这个工具有…...

渗透测试 -- 网站信息收集

数据来源 01 网站指纹识别 网站的最基本组成&#xff1a;服务器&#xff08;操作系统&#xff09;、中间件(web容器)、脚本语言&#xff08;php、java、...&#xff09;、数据库&#xff08;Mysql、...&#xff09;为什么要了解这些&#xff1f; 举个例子&#xff1a;发现了一…...

终极营销自动化工作流设计:工程师如何构建高效营销流程

终极营销自动化工作流设计&#xff1a;工程师如何构建高效营销流程 【免费下载链接】Marketing-for-Engineers A curated collection of marketing articles & tools to grow your product. 项目地址: https://gitcode.com/gh_mirrors/ma/Marketing-for-Engineers …...

告别盗版与广告:Office 2021官方纯净部署实战指南

1. 为什么选择官方纯净部署Office 2021&#xff1f; 每次打开电脑看到弹窗广告&#xff0c;或者发现系统莫名变慢的时候&#xff0c;你是不是也怀疑过那些所谓的"破解版"办公软件&#xff1f;我去年就吃过这个亏——用了某个号称"永久激活"的Office安装包…...

Perplexity引用溯源失效的5个致命盲区:从数据管道到渲染层的全链路修复手册

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Perplexity引用透明度优化的底层逻辑与设计哲学 Perplexity 作为衡量语言模型输出不确定性的核心指标&#xff0c;其引用透明度&#xff08;Referential Transparency&#xff09;并非天然具备——当同…...

OpenClaw-RUH:基于深度学习的机器人灵巧抓取框架解析与实践

1. 项目概述&#xff1a;当AI遇上“机械爪”最近在AI和机器人交叉的圈子里&#xff0c;一个名为“OpenClaw-RUH”的项目引起了我的注意。乍一看这个标题&#xff0c;你可能会觉得它又是一个开源的机械臂控制项目。但当我深入其代码仓库和社区讨论后&#xff0c;发现它的野心远不…...

超越‘点亮出图’:深入Sensor AE增益配置的三种模式与实战验证(以SC230AI/OV08A10/IMX335为例)

超越“点亮出图”&#xff1a;深入Sensor AE增益配置的三种模式与实战验证 在嵌入式Camera开发领域&#xff0c;成功点亮Sensor并输出图像仅仅是万里长征的第一步。真正的挑战往往出现在图像质量调优阶段&#xff0c;尤其是自动曝光&#xff08;AE&#xff09;与增益配置这一专…...

3分钟上手QrazyBox:让损坏的二维码“起死回生“的终极修复工具

3分钟上手QrazyBox&#xff1a;让损坏的二维码"起死回生"的终极修复工具 【免费下载链接】qrazybox QR Code Analysis and Recovery Toolkit 项目地址: https://gitcode.com/gh_mirrors/qr/qrazybox 你是否曾经遇到过这样的场景&#xff1a;打印出来的二维码被…...

构建企业的知识图谱

在智能制造与大模型时代&#xff0c;构建制造企业的工业知识图谱&#xff08;Industrial Knowledge Graph, IKG&#xff09;&#xff0c;是将企业沉淀在老师傅头脑中、纸面技术手册、PLM图纸以及MES日志中的“隐性知识”&#xff0c;转化为 AI 和工业智能体&#xff08;Industr…...

3步解决AKShare金融数据接口stock_zh_a_spot_em异常:完整数据获取指南

3步解决AKShare金融数据接口stock_zh_a_spot_em异常&#xff1a;完整数据获取指南 【免费下载链接】aktools AKTools is an elegant and simple HTTP API library for AKShare, built for AKSharers! 项目地址: https://gitcode.com/gh_mirrors/ak/aktools AKTools作为一…...

OBS高级计时器:7种计时模式让直播时间管理更简单

OBS高级计时器&#xff1a;7种计时模式让直播时间管理更简单 【免费下载链接】obs-advanced-timer 项目地址: https://gitcode.com/gh_mirrors/ob/obs-advanced-timer 在直播和视频制作中&#xff0c;时间管理是提升专业度的关键环节。obs-advanced-timer作为一款专为O…...

使用taotaokencli工具一键配置多开发环境下的ai代理

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 使用 TaoToken CLI 工具一键配置多开发环境下的 AI 代理 基础教程类&#xff0c;介绍如何通过 npx 或全局安装 TaoToken 提供的命令…...