hive优化:大表关联数据倾斜问题
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个数参数,提高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优化:大表关联数据倾斜问题相关推荐
- 大表与大表join数据倾斜_技术分享|大数据技术初探之Spark数据倾斜调优
侯亚南 数据技术处 支宸啸 数据技术处 在大数据计算中,我们可能会遇到一个很棘手的问题--数据倾斜,此时spark任务的性能会比预期要差很多:绝大多数task都很快执行完成,但个别task执行极慢或者 ...
- 记一次spark两个大表join数据倾斜调优
a表7亿条 b表1亿条a表 aid c1 c2 c3 b表 bid bvalue需求:分别用a表的c1 c2 c3与b表的bid关联(left join),获取bvalue 来扩充a表1.直接写三个l ...
- 如何应付表数据过大的查询问题?(如何尽量避免大表关联)[转]
一般来说,对于做B/S架构的朋友来说,更有机会遇到高并发的数据库访问情况,因为现在WEB的普及速度就像火箭升空,同时就会因为高访问量带来一系列性能问题,而数据库一直是用户与商人之间交流的重要平台.用户 ...
- Hive中小表与大表关联(join)的性能分析
经常看到一些Hive优化的建议中说当小表与大表做关联时,把小表写在前面,这样可以使Hive的关联速度更快,提到的原因都是说因为小表可以先放到内存中,然后大表的每条记录再去内存中检测,最终完成关联查询. ...
- Hive 分桶表原理及优化大表 join 实战
一.什么是分桶表 分桶表,比普通表或者分区表有着更为细粒度的数据划分. 举个例子,每天产生的日志可以建立分区表,每个分区在 hdfs 上就是一个目录,这个目录下包含了当天的所有日志记录. 而分桶表,可 ...
- rdd数据存内存 数据量_Spark 性能优化(二)——数据倾斜优化
1.2 数据倾斜优化 1.2.1 为何要处理数据倾斜(Data Skew) 什么是数据倾斜?对 Spark/Hadoop 这样的大数据系统来讲,数据量大并不可怕,可怕的是数据倾斜. 何谓数据倾斜?数据 ...
- 37 | 数据分布优化:如何应对数据倾斜?
文章目录 Redis核心技术与实战 实践篇 37 | 数据分布优化:如何应对数据倾斜? 数据量倾斜的成因和应对方法 bigkey 导致倾斜 Slot 分配不均衡导致倾斜 Hash Tag 导致倾斜 数 ...
- 关于表关联数据几种展示方法
我们一般在数据库用主外建关联多张表,下面就是给大家演示当两张表关联的时候的几种展现方式: 查询到表关联数据大致可以分为两类 一.封装一个实体类 封装一个实体类就是把两张表的数据都封装到一个实体类里,然 ...
- mysql 删除语句多表关联_MySQL多表关联数据同时删除sql语句
MySQL多表关联数据同时删除sql语句 有需要的朋友可参考. DELETE删除多表数据,怎样才能同时删除多个关联表的数据呢?这里做了深入的解释: 代码如下 1 delete from t1 wher ...
- 记录一次服务器大中间表优化的问题(数据倾斜的解决)
背景:每天大数据平台核心就是出报表,而核心的中间表底层是大量的报表都会依赖它运行,我们称这个报表为142.(因为报表我们这边编号是142).预计依赖于它的报表有几十个展示. 问题现象:每天142报表的 ...
最新文章
- Facebook开源数据高效图像Transformer,媲美SOTA CNN
- pycharm 类型注释_学习Python第一步,变量与数据类型
- java线程读取流的时候卡死,java – 线程中断没有结束阻塞调用输入流读取
- General VDPConfig对讲配置工具
- 倍加福编码器ENI58IL-H12BA5-1024UD1-RC5
- catia逆向建模步骤_catia逆向建模步骤_什么是3D扫描逆向设计?
- everthing 添加右键菜单
- 台式计算机没有外放声音,台式电脑外放无声音怎么办
- SpringBoot yml文件命名规则
- 鲲鹏920是计算机CPU吗,鲲鹏920是电脑cpu吗
- 八六、Linux 服务器+Nginx服务简介
- windows 10 cortana搜索功能失效
- mysql数据库设置密码
- 【应急基础】————2、开机启动项
- jsencrypt加解密 Vue测试
- 让复选框实现单选功能
- Open-falcon技术系列文章——安装部署open-falcon
- Explicit Cross-lingual Pre-training for Unsupervised Machine Translation(CMLM阅读笔记)
- 不刷单,新手还能怎么做淘宝?
- java 程序理解 BufferedReader br=new BufferedReader(new InputStreamReader(System.in));