首页 / 更多教程 / hive优化:大表关联数据倾斜问题
hive优化:大表关联数据倾斜问题
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了hive优化:大表关联数据倾斜问题,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2215字,纯文字阅读大概需要4分钟。
内容图文
![hive优化:大表关联数据倾斜问题](/upload/InfoBanner/zyjiaocheng/1031/bbdf3c001265402ab1b929a12bb51766.jpg)
A表:单副本14.9G,1002354875条数据
B表:单副本1.5G,40102307条数据
两个表通过partition_path字符串去full outer join关联,没有优化前执行要88分钟
第一种优化:
在sql结尾使用distribute by rand() ,reduce个数88个,但是还是有数据倾斜
select * from A full outer join B
on a.partition_path =b.join_path
distribute by rand()
第二种优化:
经过日志查看数据倾斜的key是 tmp.db,于是思考将这个数据不进行join关联,并将倾斜的key打散,但是发现不加distribute by rand() ,reduce个数只有1个,还是数据倾斜,于是加上distribute by rand() 后,reduce变87个,最后执行效果是 20分钟
select * from A full outer join B
on (case when a.partition_path<>'hdfs://ns6/hive/dmr/dmr_tmp.db' then a.partition_path else cast(ceiling(rand() * -65535) as string) end ) =b.join_path
distribute by rand()
第三种优化:
设置参数
==============
数据倾斜总结
原因一:关联字段中有空值或者脏数据,
原因二:关联字段中key都为有效值是,某些key量大,造成reduce计算量大
原因三:由于group by 中某个key值较大引起的
解决办法:
原因一:
如果不能过滤,则将这部分给key赋予随机值,交给不同的reduce处理
例如 cast(ceiling(rand() * -65535) as string) end )
原因二:
1、如果大小表join,则使用mapjoin,将小表放入缓存中,广播的方式分发到不同的map中,与大表在map端进行join。
2、参数设置,提高reduce个数
原因二:
1、如果大小表join,则使用mapjoin,将小表放入缓存中,广播的方式分发到不同的map中,与大表在map端进行join。
2、参数设置,提高reduce个数
原因二:
1、如果大小表join,则使用mapjoin,将小表放入缓存中,广播的方式分发到不同的map中,与大表在map端进行join。
2、设置reduce个数参数,提高reduce个数
set mapred.reduce.tasks=800
或者
set hive.exec.reducers.bytes.per.reducer = 1000000000 #每个reduce处理的数据量
3、设置数据倾斜参数
set hive.optimize.skewjoin = true;
set hive.skewjoin.key = skew_key_threshold (default = 100000)
原因三:
1、设置在map端进行combiner聚合,但是这个通常对数据比较同质的有用,
set hive.map.aggr=true
2、设置每个reduce聚合的条数
set hive.groupby.mapaggr.checkinterval = 100000 (默认)执行聚合的条数
3、使用map端的hash聚合,如果hash表的容量与输入行数之比超过这个数,那么map端的hash聚合将被关闭,默认是0.5,设置为1可以保证hash聚合永不被关闭
set hive.map.aggr.hash.min.reduction=0.
4、针对单列聚合有效的参数
set hive.groupby.skewindata=true
内容总结
以上是互联网集市为您收集整理的hive优化:大表关联数据倾斜问题全部内容,希望文章能够帮你解决hive优化:大表关联数据倾斜问题所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。