Spark Skew Join Optimization
数据倾斜在分布式计算中是一个很常见的问题,Spark提供了一种比较便捷的方法来处理一些简单的数据倾斜场景。
Spark中定位数据倾斜
1、找到耗时长的stage并确定为shuffle stage。
2、给所有的task按照shuffle records排序,找到最多数据的task。
3、比较其他的task确定是否发生了倾斜。
4、根据业务逻辑,Spark执行计划,找到倾斜的key。
单表
skew hint
必须至少包含一个表,所有和这个表有关的join都会自动使用倾斜join的优化策略。
-- orders表倾斜
SELECT /*+ SKEW('orders') */ * FROM orders, customers WHERE c_custId = o_custId-- 临时表倾斜
SELECT /*+ SKEW('C1') */ *FROM (SELECT * FROM customers WHERE c_custId < 100) C1, ordersWHERE C1.c_custId = o_custId
表和字段
一个表可能会有多join,当其中的一个字段发生了倾斜时,由于自动倾斜优化策略有一定的额外开销,所以最好是在需要的时候加上注解,而不处理所有的字段。为此,该注解支持指定某张表的某个字段,这样只有那个字段会被优化。
-- 单字段 orders的o_custId字段
SELECT /*+ SKEW('orders', 'o_custId') */ *FROM orders, customersWHERE o_custId = c_custId-- 多字段 orders的o_custId和o_storeRegionId字段
SELECT /*+ SKEW('orders', ('o_custId', 'o_storeRegionId')) */ *FROM orders, customersWHERE o_custId = c_custId AND o_storeRegionId = c_regionId
表、字段以及倾斜值
有些场景,处理单个字段都会是非常耗时的,如果我们明确了join 的key在哪个值上倾斜了,我们也可以进一步的细化注解。这样就能进一步的减少倾斜处理的额外开销了。
-- 单个表的单个字段的单个倾斜值 orders的o_custId字段的0发生了倾斜
SELECT /*+ SKEW('orders', 'o_custId', 0) */ *FROM orders, customersWHERE o_custId = c_custId-- 单个表的单个字段的多个倾斜值 orders的o_custId字段的(0, 1, 2)发生了倾斜
SELECT /*+ SKEW('orders', 'o_custId', (0, 1, 2)) */ *FROM orders, customersWHERE o_custId = c_custId-- 单个表的多个字段的多个倾斜值 orders的o_custId字段的(0, 1001)以及o_storeRegionId字段的(1, 1002)发生了倾斜
SELECT /*+ SKEW('orders', ('o_custId', 'o_storeRegionId'), ((0, 1001), (1, 1002))) */ *FROM orders, customersWHERE o_custId = c_custId AND o_storeRegionId = c_regionId
据说,Delta Lake会自动得出倾斜的值,也不妨试试。
Spark Skew Join Optimization相关推荐
- 使用 spark sql extensions 实现 skew join
文章目录 背景 skew hint 实现方式 原理 用法 语法 编译&配置 Test 局限性 参考 背景 使用 Join 时,如果出现数据倾斜就会导致OOM或者单task长时间执行的现象,如果 ...
- Spark SQL JOIN操作代码示例
title: Spark SQL JOIN操作 date: 2021-05-08 15:53:21 tags: Spark 本文主要介绍 Spark SQL 的多表连接,需要预先准备测试数据.分别创建 ...
- Spark RDD JOIN 调优
Spark RDD JOIN 调优 一. 大表关联小表 1. 小表数据量非常小时 一般当副表的数据比较小时,可以考虑将这部分的小表数据直接加载到内存中,如加工成为一个Map 结构的对象,在使用的时候将 ...
- MySQL查询优化之七-左Join 和右Join 优化(Left Join and Right Join Optimization)
MySQL查询优化之七-左Join 和右Join 优化(Left Join and Right Join Optimization) 如需转载请标明出处:http://blog.csdn.net/it ...
- Spark SQL join的三种实现方式
引言 join是SQL中的常用操作,良好的表结构能够将数据分散到不同的表中,使其符合某种规范(mysql三大范式),可以最大程度的减少数据冗余,更新容错等,而建立表和表之间关系的最佳方式就是join操 ...
- spark outer join push down filter rule(spark 外连接中的下推规则)
背景 对于spark的不同的join操作来说,有些谓词是能下推,是有谓词是不能下推的,今天我们实地操作一番,从现象和源码级别分析一下,这到底是怎么回事. 版本&环境 spark 3.2.0 m ...
- Skewed Join Optimization
当join两个大表的时候,对于其中较大的一个表存在少量倾斜很严重的key的时候,可以将这部分key先提取出来(distinct (key))和另外一个表join作为后续map join的小表来用.和下 ...
- spark left join 和 right join 的坑
前言 本文隶属于专栏<Spark异常问题汇总>,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见 Spark异常问题汇总 问题描述 ...
- Spark 的join 什么时候是宽依赖什么时候是窄依赖
1准备数据 spark-shell --master spark://linux01:7077 --executor-meg --total-executor-cores 4 val sc: Spar ...
最新文章
- 洛谷 P1678 烦恼的高考志愿
- python——LeetCode刷题
- 【HDU - 1520】Anniversary party (树形dp)
- 我的编程之路:网编到全栈的漫长路
- Linux core dumps 的生成
- UVA-1602 Lattice Animals 搜索问题(打表+set)
- 各种常用的 Win32Api 汇总(持续更新中. . .)
- 十款好用的PDF编辑软件推荐
- 2022年软考网络工程师考试备考指南
- word打开老是配置进度_打开word文档显示配置进度怎么办 Word文档提示配置进度解决办法...
- IOS的疯狂游戏:浮躁气氛正笼罩整个iOS游戏市场
- mac/macbook触摸板/鼠标/键盘失灵
- offlineimap读取qq邮箱
- html中一些界面设计
- SQL Server中,备份数据表
- Beta 测试和 Alpha 测试有什么区别?
- 欧陆风云3实用修改代码
- asp+excel通用成绩查询系统 v6.8 工资查询物业费水电费查询通用哦
- 基于Springboot+LayUI前后端分离小区物业系统带疫情防疫打卡管理
- 博弈论学习笔记(七)纳什均衡伯川德模型与选民投票