Hive 高级应用(二)之 Hive 数据倾斜

1、数据倾斜

由于数据分布不均匀,造成数据大量的集中到一点,造成数据热点。

1.2、Hadoop 框架的特性

(1)不怕数据大,怕数据倾斜;
(2)Jobs 数比较多的作业运行效率相对比较低,如子查询比较多;
(3)sum、count、max、min 等聚集函数,通常不会有数据倾斜问题。

1.3、主要表现

任务进度长时间维持在 99% 或者 100% 的附近,查看任务监控页面,发现只有少量 reduce 子任务未完成,因为其处理的数据量和其他的 reduce 差异过大。单一 reduce 处理的记录数和平均记录数相差太大,通常达到好几倍之多,最长时间远大于平均时长。

1.4、容易数据倾斜情况

hive 中查询操作:

关键字 情形 后果
join(1) 其中一个表较小,但是 key 集中。 分发到某一个或几个 reduce 上的数据远高于平均值
join(2) 大表与大表关联,但是分桶的判断字段 0 值或空值过多 这些空值都由一个 reduce 处理,非常慢。
group by group by 的维度过小,某值的数量过多。 处理某值的 reduce 非常耗时。
count distinct 某特殊值过多。 处理此特殊值的 reduce 耗时。

A、group by 不和聚集函数搭配使用的时候;
B、count(distinct),在数据量大的情况下,容易数据倾斜,因为 count(distinct)是按 group by 字段分组,按 distinct 字段排序;
C、 小表关联超大表 join。

1.5、产生数据倾斜的原因

(1)key 分布不均匀;
(2)业务数据本身的特性;
(3)建表考虑不周全;
(4)某些 HQL 语句本身就存在数据倾斜。

1.6、业务场景

1.6.1、空值产生的数据倾斜

(1)场景说明:在日志中,常会有信息丢失的问题,比如日志中的 user_id,如果取其中的 user_id 和用户表中的 user_id 相关联,就会碰到数据倾斜的问题。

(2)解决方案 1:user_id 为空的不参与关联

select * from log a join user b on a.user_id is not null and a
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值