一、Hive数据倾斜
一般都发生在Sql中group by和join on上
1.不同数据类型关联产生数据倾斜
例如:两个表进行关联,其中一个字段类型是int一个是String
解决:把数字类型转换成字符串类型
2.空值分布:经常有大量的空值数据进入到一个reduce中导致数据倾斜
解决:自定义分区,将为空的key转变为字符串+随机数,将因为空值造成的数据倾斜数据分不到不同的reducer中(如果一下特殊异常值不需要可以直接where过滤掉)
3.group by代替distinct
4.开启mapjoin
5.开启负载均衡:先随机分发处理再按照key group by来分发处理
6.设置多个reduce数量,默认为1
二、Spark数据倾斜
- Executor lost,OOM,Shuffle过程出错
- Driver OOM
- 单个Executor执行时间特别久 整体任务卡住
- 正常运行的任务突然失败
1.快速定位到导致数据倾斜的代码
Spark数据倾斜只会发生在shuffle过程中
触发shuffle的算子有:distinct/groupByKey/reduceByKey/aggregateByKey/join/repatition/cogroup等
(出现