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 基础-- 数据倾斜的主要内容,如果未能解决你的问题,请参考以下文章

017-Hadoop Hive sql语法详解7-去重排序数据倾斜

Hive数据倾斜优化:两个亿级表join

如何处理hive中的数据倾斜

Hive学习之路 (十九)Hive的数据倾斜

HADOOP-HIVE分区,桶,倾斜概念

干货!来取!Hadoop调度器 和Hive中发生数据倾斜的处理方法