大数据学习(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次数可能很多,也就不可以解决数据倾斜问题,这样第二种方法的优势就出来了。
相关推荐
盐焗西兰花25 分钟前
鸿蒙学习实战之路-Reader Kit修改翻页方式字体大小及行间距最佳实践
学习·华为·harmonyos
QiZhang | UESTC40 分钟前
学习日记day76
学习
久邦科技1 小时前
20个免费电子书下载网站,实现电子书自由(2025持续更新)
学习
Coder_Boy_1 小时前
技术让开发更轻松的底层矛盾
java·大数据·数据库·人工智能·深度学习
2501_944934731 小时前
高职大数据技术专业,CDA和Python认证优先考哪个?
大数据·开发语言·python
Gain_chance1 小时前
34-学习笔记尚硅谷数仓搭建-DWS层最近一日汇总表建表语句汇总
数据仓库·hive·笔记·学习·datagrip
九河云2 小时前
5秒开服,你的应用部署还卡在“加载中”吗?
大数据·人工智能·安全·机器学习·华为云
Gain_chance2 小时前
36-学习笔记尚硅谷数仓搭建-DWS层数据装载脚本
大数据·数据仓库·笔记·学习
XH华3 小时前
备战蓝桥杯,第九章:结构体和类
学习·蓝桥杯
每日新鲜事3 小时前
热销复盘:招商林屿缦岛203套售罄背后的客户逻辑分析
大数据·人工智能