hive产生数据倾斜的常见原因
一key分布不均衡
二、业务问题或者业务数据本身的问题,某些数据比较集中 如按日期分区后,某一段日期数据量过大
三、建表的时候考虑不周 表分区不合理或者分区过少
四、某些sql语句本身就有数据倾斜,
hive数据倾斜解决方案
1join时:首先是大表关联小表,容易发生数据倾斜一个大表和一个小表进行join操作时。使用mapjoin将小表加载到内存中
2join时:空key过多,或者相同key过多 如果是异常数据就过滤,join前先过滤 不是异常数据null值分配随机的key值
3join时:不同数据类型关联产生数据倾斜 把数字类型转换成字符串类型
4join时:大表和不大不小的表联接 去重后大表可能会变成小表,这样又可以mapjoin
5join时:大表联接大表 两个大表联查,分桶优化
6group by发生的数据倾斜group by引起的倾斜主要是输入数据行按照group by列分布不均匀引起的。
解决思路就是将这些key值打散,使起分散到多个reduce节点处理即可,达到负载均衡的效果
7count distinct优化 先group by再count的方式来优化
8行列过滤 优化编辑
9面对复杂逻辑,每个map耗时较长,适当增加map的个数
10假如小文件比较多,可以先进行小文件合并
11合理调整reduce个数
12有些阶段不完全依赖的话可以并行执行 前提资源空闲