IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Spark SQL JOIN 异常问题调优(Hint方式) -> 正文阅读

[大数据]Spark SQL JOIN 异常问题调优(Hint方式)

Spark SQL JOIN 异常问题调优(Hint方式)

1.大表关联小表 (显式广播小表)

在SQL中加入广播的提示
示例:

-- test_table_a row_count=1000W
-- test_table_b row_count=500

SELECT /*+ BROADCAST(t2) */
  t1.id
  ,t2.name
FROM test_table_a t1
LEFT JOIN test_table_b t2
  ON t1.id = t2.id

这里的 /*+ BROADCAST(t2) / 也可以写成 /+ BROADCASTJOIN (t2) / ,/+ MAPJOIN (t1) */

*以下仅适用于spark3.0 及以上版本

2. 解决SQL中关联时某个字段存在数据倾斜的情况

对关联某个关联字段进行拆分
示例:

-- test_main_table:city_code字段分布情况: C001:1000w条记录,其他的code每个平均100条记录
-- test_city_table: 维表,code作为主键,不会重复
-- 不加提示的情况下会产生数据倾斜的情况,一个task在running这1000w条记录,导致整个任务运行很久,或者导致executor OOM

SELECT /*+ REPARTITION_BY_RANGE(32, city_code) */
  t1.city_code
  , t2.city_name
FROM test_main_table t1
LEFT test_city_table t2
  ON t1.city_code = t2.code

加入/*+ REPARTITION_BY_RANGE(32, city_code) /可以始得在关联的时候对主表的city_code进行重新分区,划分成32个分区,从而解决数据倾斜问题,同样的这个hint还可以写成:/+ REPARTITION_BY_RANGE? /,/+ REPARTITION(3, c) */

3.控制SQL结果输出数据文件个数

需要指定SQL输出的数据文件分区个数
示例

SELECT /*+ REPARTITION(8) */
 *
FROM test_table

当加入 /*+ REPARTITION(8) / 提示就会始最终数据的文件块变为8,同样的提示还有:/+ COALESCE(8) */,两者的区别在于前者会进行shuffle开销,而后者却不会.

4.解决异常广播问题

强制关联过程中不使用广播
示例:

-- test_table_a row_count=1000W
-- test_table_b row_count=900w
-- 在关联的过程中由于表元数据信息记录有误,导致spark将t2表误解成了小表进行了广播.

SELECT /*+ SHUFFLE_MERGE(t2) */
  t1.id
  ,t2.name
FROM test_table_a t1
LEFT JOIN test_table_b t2
  ON t1.id = t2.id

当加入 /*+ SHUFFLE_MERGE(t1) / 提示后,spark 会强制对t1于t2的关联转换成shuffle sort merge join的模式,从而解决大表被广播的异常,等同的提示还有 /+ MERGEJOIN(t2) /,/+ MERGE(t1) */

详细请参考spark官方文档

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-05-18 17:42:19  更:2022-05-18 17:44:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 19:39:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码