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

HIVE优化系列之数据倾斜

数据倾斜

在hive表中 进行一系列join关联时经常会出现数据倾斜问题,可以通过hint将小表进行广播,从而提高查询的执行效率。
  • 第一种hint方法:/*+ BROADCAST(small_table) */
SELECT /*+ BROADCAST(small_table) */ 
 *
FROM large_table
JOIN small_table ON large_table.id = small_table.id;

这个用法时告诉 Hive 在执行连接操作时将表 small_table 进行广播(即在所有的 Mapper 节点上复制一份),以便在连接时避免数据倾斜。
括号里的 small_table 通常指的是小表。因为广播小表可以减少 Shuffle 操作,提高查询性能。

  • 第二种hint方法:/*+ BROADCASTJOIN(small_table) */
SELECT /*+ BROADCASTJOIN(small_table) */ 
 *
FROM large_table
LEFT JOIN small_table ON large_table.id = small_table.id;

这个用法跟上边一样都是指示Hive 在执行连接时使用广播连接的方式,避免大表和小表之间的 Shuffle 操作,减少网络传输和计算时间。

  • 第三种hint方法:/*+ MAPJOIN(small_table) */
SELECT /*+ MAPJOIN(small_table) */ 
 *
FROM large_table
LEFT JOIN small_table ON large_table.id = small_table.id;

这个用法与上边两个不同,他会强制Hive 将表small_table 作为MapJoin 处理,即在 Mapper 阶段直接连接,而不需要进行Shuffle 操作。通过将小表放入每个Mapper,可以加快连接速度,尤其是在小表较小且能够被完全加载到内存中的情况下。


结论:
三者都用于优化连接操作,尤其在数据倾斜的情况下。
使用这些提示时,需要确保选择的表确实是小表(一般小于200M),以避免内存溢出或性能问题。


http://www.kler.cn/news/328434.html

相关文章:

  • 数据库课程设计案例:在线教育管理系统
  • 51单片机学习第六课---B站UP主江协科技
  • 【STM32单片机_(HAL库)】4-4【定时器TIM】脉冲计数配置步骤及实验
  • 从0开始深度学习(6)——Pytorch动态图机制(前向传播、反向传播)
  • 基础算法--双指针【概念+图解+题解+解释】
  • Arduino UNO R3自学笔记12 之 Arduino在调试过程中串口的使用
  • 【Router】T750路由功能之VLAN划分功能介绍及实现
  • 论文笔记:LAFF 文本到视频检索的新基准
  • 【算法】链表:21.合并两个有序链表(easy)
  • 什么是信息增益比
  • MFC工控项目实例之十九手动测试界面输出信号切换
  • Python办公自动化之Excel
  • [C++] 小游戏 征伐 SLG DNF 0.0.1 版本 zty出品
  • ARM base instruction -- ic
  • 滚雪球学MySQL[2.3讲]:MySQL数据过滤与排序详解:WHERE条件、ORDER BY排序与LIMIT分页查询
  • 物联网智能项目研究
  • 如何创建AWS云账号
  • 思维+贪心,CF 1210B - Marcin and Training Camp
  • SD-WebUI forge支持flux模型。算力互联forge镜像使用教程
  • 【鸿蒙学习】深入了解UIAbility组件
  • Java在用增强for循环遍历集合时删除元素,抛出java.util.ConcurrentModificationException异常
  • 【Verilog学习日常】—牛客网刷题—Verilog企业真题—VL69
  • 决策树中联合概率分布公式解释说明
  • 如何判断电器外壳是否带电
  • 十四、磁盘的管理
  • SpringBoot之Profile的两种使用方式
  • 二叉搜索树详解
  • 基于ARX结构的流密码算法Salsa20
  • mybatis-puls快速入门
  • Nginx的核心架构和设计原理