一.hive sql优化
1.发生数据倾斜,如何解决?
什么是数据倾斜?
由于数据分布不均匀,造成数据大量的集中到一点,造成数据热点
1.1 原因
1)、key分布不均匀
2)、业务数据本身的特性
3)、建表时考虑不周
4)、某些SQL语句本身就有数据倾斜
1.2 表现
任务进度长时间维持在99%(或100%),查看任务监控页面,发现只有少量(1个或几个)reduce子任务未完成。因为其处理的数据量和其他reduce差异过大。
单一reduce的记录数与平均记录数差异过大,通常可能达到3倍甚至更多。 最长时长远大于平均时长。
1.3 解决方法
1) 打散 分布不均的key 值 ,例如使用 COALESCE(我是key值, concat('!!!',rand())) 或者 对key值进行hash转换
2) 对数据量较大的表进行拆分:分区,增量
终极套路:使用Bucket 桶表,可理解为在分区的基础上再做更细的分区表。
tips:需提前准备好桶表;用于分桶的字段值增长量不能过大
可参考:https://blog.csdn.net/u013850277/article/details/65937122?utm_source=itdadao&utm_medium=referral
3) 将数据量小的表进行 广播机制,hive 里关键字 是 /*+MAPJ