自学内容网 自学内容网

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),以避免内存溢出或性能问题。


原文地址:https://blog.csdn.net/qq_47255712/article/details/142653015

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!