大数据学习(15)-数据倾斜

&&大数据学习&&

🔥系列专栏: 👑哲学语录: 承认自己的无知,乃是开启智慧的大门

💖如果觉得博主的文章还不错的话,请点赞👍+收藏⭐️+留言📝支持一下博>主哦🤞


数据倾斜概述

数据倾斜问题,通常是指参与计算的数据分布不均,即某个key或者某些key的数据量远超其他key,导致在shuffle阶段,大量相同key的数据被发往同一个Reduce,进而导致该Reduce所需的时间远超其他Reduce,成为整个任务的瓶颈。

Hive中的数据倾斜常出现在分组聚合和join操作的场景中,下面分别介绍在上述两种场景下的优化思路。

分组聚合导致的数据倾斜

优化说明

之前提到过,Hive中未经优化的分组聚合,是通过一个MapReduce Job实现的。Map端负责读取数据,并按照分组字段分区,通过Shuffle,将数据发往Reduce端,各组数据在Reduce端完成最终的聚合运算。

如果group by分组字段的值分布不均,就可能导致大量相同的key进入同一Reduce,从而导致数据倾斜问题。

由分组聚合导致的数据倾斜问题,有以下两种解决思路:

1 Map-Side 聚合

开启Map-Side聚合后,数据会现在Map端完成部分聚合工作。这样一来即便原始数据是倾斜的,经过Map端的初步聚合后,发往Reduce的数据也就不再倾斜了。最佳状态下,Map-端聚合能完全屏蔽数据倾斜问题。

相关参数如下:

复制代码
--启用map-side聚合

set hive.map.aggr=true;



--用于检测源表数据是否适合进行map-side聚合。检测的方法是:先对若干条数据进行map-side聚合,若聚合后的条数和聚合前的条数比值小于该值,则认为该表适合进行map-side聚合;否则,认为该表数据不适合进行map-side聚合,后续数据便不再进行map-side聚合。

set hive.map.aggr.hash.min.reduction=0.5;



--用于检测源表是否适合map-side聚合的条数。

set hive.groupby.mapaggr.checkinterval=100000;



--map-side聚合所用的hash table,占用map task堆内存的最大比例,若超出该值,则会对hash table进行一次flush。

set hive.map.aggr.hash.force.flush.memory.threshold=0.9;

2 Skew-GroupBy 优化

Skew-GroupBy的原理是启动两个MR任务,第一个MR按照随机数分区,将数据分散发送到Reduce,完成部分聚合,第二个MR按照分组字段分区,完成最终聚合。

相关参数如下:

复制代码
--启用分组聚合数据倾斜优化

set hive.groupby.skewindata=true;

1 Map-Side 聚合

设置如下参数

复制代码
--启用map-side聚合

set hive.map.aggr=true;

--关闭skew-groupby

set hive.groupby.skewindata=false;

(2) Skew-GroupBy 优化

设置如下参数

复制代码
--启用skew-groupby

set hive.groupby.skewindata=true;

--关闭map-side聚合

set hive.map.aggr=false;

开启Skew-GroupBy优化后,可以很明显看到该sql执行在yarn上启动了两个mr任务,第一个mr打散数据,第二个mr按照打散后的数据进行分组聚合。

需要注意的是,map-side聚合一定是要比Skew-GroupBy要快的,因为Skew-GroupBy需要两个mapreduce任务,所以大多数情况下还是前者用的多,但是!如果空间不够内存不足,map-side需要维护一个哈希表,这样flush次数可能很多,也就不可以解决数据倾斜问题,这样第二种方法的优势就出来了。
相关推荐
JZC_xiaozhong14 小时前
销售订单如何自动同步多个业务系统?3种方案对比分析
大数据·数据分析·数据一致性·应用集成·数据孤岛解决方案·数据集成与应用集成
产品推荐官14 小时前
2026年AI应用开发服务商的选择逻辑:适配度比功能清单更重要
大数据·人工智能·ai·技术分享·开发经验
rrrjqy15 小时前
风险与组合管理——Quant-for-Beginners 量化入门Task6
大数据·人工智能
倒流时光三十年15 小时前
第一阶段 01.Elasticsearch 核心概念与 PostgreSQL 对照
大数据·elasticsearch·postgresql
学术小白人15 小时前
医学交叉会议!EI检索!2026年人工智能与健康信息学国际学术会议(AIHI 2026)
大数据·人工智能·搜索引擎·自动化·医学
RD_daoyi15 小时前
Google偷偷给AI引用加了五个新功能:内联引用、悬停预览、品牌展示……但点击率真的回来了吗?
大数据·网络·人工智能·算法·安全·搜索引擎
范什么特西15 小时前
Elasticsearch基本命令
大数据·elasticsearch·搜索引擎
旺仔学长 哈哈15 小时前
55384 消防安全教育与逃生演练小程序:知识学习、案例浏览和在线演练一站式实现
学习·小程序·消防教育·逃生演练
2503_9317124815 小时前
2026 企业级 AI 智能体平台选型指南:市场格局、品类解析与落地建议
大数据·人工智能
今夜有雨.16 小时前
C++JSON 解析器
c++·笔记·后端·学习·json