Hive 基础-- 数据倾斜
Posted highfei2011
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hive 基础-- 数据倾斜相关的知识,希望对你有一定的参考价值。
1.什么是数据倾斜?
由于数据分布不均匀,导致大量数据集中到一点,造成数据热点。常见现象:一个 hive sql 有100个 map/reducer task, 有一个运行了 20分钟,其他99个 task 只运行了 1分钟。
2.产生数据倾斜的原因有哪些?
我个人认为导致数据倾斜的本质原因是数据量过大,导致程序不能按预期结果输出。一般原因有如下几个:
key 分布不均匀
sql 不合理
建表时类型有问题
3.导致数据倾斜的算子有哪些?
count、disticnt、group by 、join等。
4.常见的解决方案有哪些?
打散key、分段聚合、列裁剪(最好从开发角度和业务角度考虑)、case when 优化。
5.典型场景举例
空值 join:在不影响业务的情况下,filter 掉再join;或者分段处理。
字段类型不一致导致倾斜:因hash 值不一样,解决:使用相同数据类型
某张表数据量过大:使用列裁剪+中间表
调整 group by 顺序:partition by / group by 小数据量1,小数据量2 ----> 提高查询速度
cpu 占用过高:排查 case when 是否可以调整,常见使用数学乘法运算替代。比如 a、b、c 的属性可以使用 boolean 类型,那么使用 0 乘以任何数都是0,1*1 为1 来代替 sum(case when ) 的判断,sql 运行速度可提升数倍。
以上是关于Hive 基础-- 数据倾斜的主要内容,如果未能解决你的问题,请参考以下文章