浪尖以案例聊聊spark3的动态分区裁剪

2023-10-09 02:38

本文主要是介绍浪尖以案例聊聊spark3的动态分区裁剪,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

动态分区裁剪,其实就牵涉到谓词下推,希望在读本文之前,你已经掌握了什么叫做谓词下推执行。

SparkSql 中外连接查询中的谓词下推规则

动态分区裁剪比谓词下推更复杂点,因为他会整合维表的过滤条件,生成filterset,然后用于事实表的过滤,从而减少join。当然,假设数据源能直接下推执行就更好了,下推到数据源处,是需要有索引和预计算类似的内容。

1.静态数据集分区谓词下推执行

下面sql 是为例

SELECT * FROM Sales WHERE day_of_week = ‘Mon’

该语句执行有两种可能:

1) .全表扫描,然后过滤。

2) .先过滤再扫描。

假如表按照day_of_week字段分区,那sql应该是将filter下推,先过滤,然后在scan。

 

这就是传统数据库存在索引及预计算的时候所说的谓词下推执行。

2.动态分区裁剪场景

Spark 3.0的分区裁剪的场景主要是基于谓词下推执行filter(动态生成),然后应用于事实表和维表join的场景。

如果存在分区表和维表上的filter,则通过添加dynamic-partition-pruning filter来实现对另一张表的动态分区修剪。

有下面一个简单的sql,完成的功能是事实表(sales)和维表(Date)的join:

SELECT * FROM Sales JOIN Date WHERE Date.day_of_week = ‘Mon’;

假如不存在任何下推执行的优化,执行过程就应该如下图:

上图就是不存在任何谓词下推执行优化的计算过程,全量扫描事实表sales和维表date表,然后完成join,生成的表基础上进行filter操作,然后在scan计算,显然这样做很浪费性能。

假如维表支持下推执行,那么就可以先进行维表的filter操作,减少维表Date的数据量加载,然后在进行事实表sales的scan和维表date的scan,最后进行join操作。

想一想,由于where条件的filter是维表Date的,spark读取事实表的时候也是需要使用扫描的全表数据来实现join,这就大大增加了计算量。

假如能进一步优化,通过维表date的filter,生成一个新的事实表的salesFilterSet,应用到事实表sales,那么就可以大大减少join计算性能消耗。也即是这个样子:

这个就叫做动态分区裁剪。下面的例子会更详细点:

表t1和t2进行join,为了减少参加join计算的数据量,就为t1表计算(上图右侧sql)生成了一个filter数据集,然后再扫描之后过滤。当然,这个就要权衡一下,filter数据集生成的子查询及保存的性能消耗,与对数据过滤对join的性能优化的对比了,这就要讲到spark sql的优化模型了。

spark sql 是如何实现sql优化操作的呢?

一张图可以概括:

现在sql解析的过程中完成sql语法优化,然后再根据统计代价模型来进行动态执行优化。

逻辑执行计划的优化都是静态的,物理计划的选择可以基于统计代价模型来计算动态选择。

下图是一个基于分区ID的join实现。维表的数据是没有分区的,事实表的数据是分区的。假如没有动态分区裁剪,那么完成的执行过程就如图所示。事实表和维表都需要全表扫描,然后对维表执行filter操作,最后再进行join操作。

假如对维表的filter操作,进行一些计算然后可以生成事实表的filter set,那么就可以减少维表和事实表join的数据量了。就如前面的t1和t2的join例子一样。

当然,上面的例子要考虑计算和保存事实表的filter set集合的开销是否远小于其减少join数据量的增益,否则就得不偿失了。

还有一种join大家都比较熟悉,那就是Broadcast Hash Join。

这种主要是重用广播的结果,来实现filter功能。这个的理解要基于BroadcastExchangeExec。后面出文章详细聊吧。

至于效果码,可以关注浪尖微信公众号:bigdatatip。然后输入 :dpp获取完整的ppt及测试数据。

这篇关于浪尖以案例聊聊spark3的动态分区裁剪的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/169742

相关文章

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

第10章 中断和动态时钟显示

第10章 中断和动态时钟显示 从本章开始,按照书籍的划分,第10章开始就进入保护模式(Protected Mode)部分了,感觉从这里开始难度突然就增加了。 书中介绍了为什么有中断(Interrupt)的设计,中断的几种方式:外部硬件中断、内部中断和软中断。通过中断做了一个会走的时钟和屏幕上输入字符的程序。 我自己理解中断的一些作用: 为了更好的利用处理器的性能。协同快速和慢速设备一起工作

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

动态规划---打家劫舍

题目: 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。 思路: 动态规划五部曲: 1.确定dp数组及含义 dp数组是一维数组,dp[i]代表

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、

客户案例:安全海外中继助力知名家电企业化解海外通邮困境

1、客户背景 广东格兰仕集团有限公司(以下简称“格兰仕”),成立于1978年,是中国家电行业的领军企业之一。作为全球最大的微波炉生产基地,格兰仕拥有多项国际领先的家电制造技术,连续多年位列中国家电出口前列。格兰仕不仅注重业务的全球拓展,更重视业务流程的高效与顺畅,以确保在国际舞台上的竞争力。 2、需求痛点 随着格兰仕全球化战略的深入实施,其海外业务快速增长,电子邮件成为了关键的沟通工具。

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。

代码随想录冲冲冲 Day39 动态规划Part7

198. 打家劫舍 dp数组的意义是在第i位的时候偷的最大钱数是多少 如果nums的size为0 总价值当然就是0 如果nums的size为1 总价值是nums[0] 遍历顺序就是从小到大遍历 之后是递推公式 对于dp[i]的最大价值来说有两种可能 1.偷第i个 那么最大价值就是dp[i-2]+nums[i] 2.不偷第i个 那么价值就是dp[i-1] 之后取这两个的最大值就是d

STL经典案例(四)——实验室预约综合管理系统(项目涉及知识点很全面,内容有点多,耐心看完会有收获的!)

项目干货满满,内容有点过多,看起来可能会有点卡。系统提示读完超过俩小时,建议分多篇发布,我觉得分篇就不完整了,失去了这个项目的灵魂 一、需求分析 高校实验室预约管理系统包括三种不同身份:管理员、实验室教师、学生 管理员:给学生和实验室教师创建账号并分发 实验室教师:审核学生的预约申请 学生:申请使用实验室 高校实验室包括:超景深实验室(可容纳10人)、大数据实验室(可容纳20人)、物联网实验