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优化:大表关联数据倾斜问题相关推荐

  1. 大表与大表join数据倾斜_技术分享|大数据技术初探之Spark数据倾斜调优

    侯亚南 数据技术处 支宸啸 数据技术处 在大数据计算中,我们可能会遇到一个很棘手的问题--数据倾斜,此时spark任务的性能会比预期要差很多:绝大多数task都很快执行完成,但个别task执行极慢或者 ...

  2. 记一次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 ...

  3. 如何应付表数据过大的查询问题?(如何尽量避免大表关联)[转]

    一般来说,对于做B/S架构的朋友来说,更有机会遇到高并发的数据库访问情况,因为现在WEB的普及速度就像火箭升空,同时就会因为高访问量带来一系列性能问题,而数据库一直是用户与商人之间交流的重要平台.用户 ...

  4. Hive中小表与大表关联(join)的性能分析

    经常看到一些Hive优化的建议中说当小表与大表做关联时,把小表写在前面,这样可以使Hive的关联速度更快,提到的原因都是说因为小表可以先放到内存中,然后大表的每条记录再去内存中检测,最终完成关联查询. ...

  5. Hive 分桶表原理及优化大表 join 实战

    一.什么是分桶表 分桶表,比普通表或者分区表有着更为细粒度的数据划分. 举个例子,每天产生的日志可以建立分区表,每个分区在 hdfs 上就是一个目录,这个目录下包含了当天的所有日志记录. 而分桶表,可 ...

  6. rdd数据存内存 数据量_Spark 性能优化(二)——数据倾斜优化

    1.2 数据倾斜优化 1.2.1 为何要处理数据倾斜(Data Skew) 什么是数据倾斜?对 Spark/Hadoop 这样的大数据系统来讲,数据量大并不可怕,可怕的是数据倾斜. 何谓数据倾斜?数据 ...

  7. 37 | 数据分布优化:如何应对数据倾斜?

    文章目录 Redis核心技术与实战 实践篇 37 | 数据分布优化:如何应对数据倾斜? 数据量倾斜的成因和应对方法 bigkey 导致倾斜 Slot 分配不均衡导致倾斜 Hash Tag 导致倾斜 数 ...

  8. 关于表关联数据几种展示方法

    我们一般在数据库用主外建关联多张表,下面就是给大家演示当两张表关联的时候的几种展现方式: 查询到表关联数据大致可以分为两类 一.封装一个实体类 封装一个实体类就是把两张表的数据都封装到一个实体类里,然 ...

  9. mysql 删除语句多表关联_MySQL多表关联数据同时删除sql语句

    MySQL多表关联数据同时删除sql语句 有需要的朋友可参考. DELETE删除多表数据,怎样才能同时删除多个关联表的数据呢?这里做了深入的解释: 代码如下 1 delete from t1 wher ...

  10. 记录一次服务器大中间表优化的问题(数据倾斜的解决)

    背景:每天大数据平台核心就是出报表,而核心的中间表底层是大量的报表都会依赖它运行,我们称这个报表为142.(因为报表我们这边编号是142).预计依赖于它的报表有几十个展示. 问题现象:每天142报表的 ...

最新文章

  1. Facebook开源数据高效图像Transformer,媲美SOTA CNN
  2. pycharm 类型注释_学习Python第一步,变量与数据类型
  3. java线程读取流的时候卡死,java – 线程中断没有结束阻塞调用输入流读取
  4. General VDPConfig对讲配置工具
  5. 倍加福编码器ENI58IL-H12BA5-1024UD1-RC5
  6. catia逆向建模步骤_catia逆向建模步骤_什么是3D扫描逆向设计?
  7. everthing 添加右键菜单
  8. 台式计算机没有外放声音,台式电脑外放无声音怎么办
  9. SpringBoot yml文件命名规则
  10. 鲲鹏920是计算机CPU吗,鲲鹏920是电脑cpu吗
  11. 八六、Linux 服务器+Nginx服务简介
  12. windows 10 cortana搜索功能失效
  13. mysql数据库设置密码
  14. 【应急基础】————2、开机启动项
  15. jsencrypt加解密 Vue测试
  16. 让复选框实现单选功能
  17. Open-falcon技术系列文章——安装部署open-falcon
  18. Explicit Cross-lingual Pre-training for Unsupervised Machine Translation(CMLM阅读笔记)
  19. 不刷单,新手还能怎么做淘宝?
  20. java 程序理解 BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

热门文章

  1. Asp.net 对路径的访问被拒绝 解决办法
  2. iOS系统的每次更新,要不要升?
  3. 先进驾驶员辅助系统ADSA
  4. 建文高考成绩查询2021,2021届新高考语文强化模拟卷(三).pdf
  5. python下载m3u8文件视频
  6. 网站打开慢解决办法——在Google Chrome浏览器中安装ReplaceGoogleCDN插件
  7. java开发工具eclipse中@author怎么改
  8. 磁盘的组成、MBR、GPT
  9. Flash停更!「偷菜」的快乐还记得吗?
  10. 在c语言中作为字符串结束标志是什么,字符串的结束标志是什么?