hive数据倾斜原因以及解决办法
何谓数据倾斜?数据倾斜指的是,并行处理的数据集 中,某一部分(如Spark的一个Partition)的数据显著多于其它部分,从而使得该部分的处理速度成为整个数据集处理的瓶颈。
表现为整体任务基本完成,但仍有少量子任务的reduce还在运行。
数据倾斜的原因:
1.join
一个表较小,但key集中,分发到一个或者几个reduce上的数据远高于平均值;
大表与大表关联,但分桶的判断字段0值或者空值过多,这些空值或者0值都由一个reduce处理
2.group by
分组的维度过少,每个维度的值过多,导致处理某值的reduce耗时很久
3.count distinct
特殊值过多,处理特殊值耗时
综上所述原因就是:
key值分布不均,数据本身的原因(特殊值过多),sql语句不合理,表建的不合理
解决数据倾斜的方法:
1.参数配置
hive> set hive.map.aggr=true; 设置map端聚合
hive> set hive.groupby.skewindata=true; 当数据倾斜时,进行负责均衡
2.语句优化
小表与大表join时,使用mapjoin 将小表加载到内存中。
scala> hivecon.sql("select /*MAPJOIN(tbsex)*/ b.custname,b.nianling,a.sexname from tbsex a join cust b on a.id=b.sex").show
+---------------+--------+-------+
| custname|nianling|sexname|
+---------------+--------+-------+
| hello| 100| man|
| wangwu| 47| man|
| liuqin| 56| man|
| hello| 100| man|
| wangwu| 47| man|
| liuqin| 56| man|
| nihao| 5| woman|
| mahuateng| 1001| woman|
| liuyang| 32| woman|
| nihao| 5| woman|
| zhangsan| 20| woman|
| wangwu| 85| woman|
|tianyt_touch100| 50| woman|
| mahuateng| 1001| woman|
| liuyang| 32| woman|
| zhangsan| 20| woman|
| wangwu| 85| woman|
|tianyt_touch100| 50| woman|
+---------------+--------+-------+
如果关联的key存在空值,可以过滤掉空值再进行关联也可以为空值赋一个随机值
scala> hivecon.sql("select b.custname,b.nianling,a.sexname from tbsex a join cust b on b.sex is not null and a.id=b.sex").show
+---------------+--------+-------+
| custname|nianling|sexname|
+---------------+--------+-------+
| hello| 100| man|
| wangwu| 47| man|
| liuqin| 56| man|
| hello| 100| man|
| wangwu| 47| man|
| liuqin| 56| man|
| nihao| 5| woman|
| mahuateng| 1001| woman|
| liuyang| 32| woman|
| nihao| 5| woman|
| zhangsan| 20| woman|
| wangwu| 85| woman|
|tianyt_touch100| 50| woman|
| mahuateng| 1001| woman|
| liuyang| 32| woman|
| zhangsan| 20| woman|
| wangwu| 85| woman|
|tianyt_touch100| 50| woman|
+---------------+--------+-------+
把空值的 key 变成一个字符串加上随机数,就能把倾斜的数据分到不同的reduce上 ,解决数据倾斜问题。 concat('hehe',rand())
count distinct 引起的数据倾斜,可以先去重后再进行统计
scala> hivecon.sql("select sex,count(distinct custname) from cust group by sex").show
+----+------------------------+
| sex|count(DISTINCT custname)|
+----+------------------------+
|null| 1|
| 1| 6|
| 0| 3|
+----+------------------------+
scala> hivecon.sql("select sex,count(1) from (select sex,custname from cust group by custname, sex) mm group by sex").show
+----+--------+
| sex|count(1)|
+----+--------+
|null| 1|
| 1| 6|
| 0| 3|
+----+--------+
3.map和reduce优化
小文件过多的时候合并小文件
hive> set hive.merge.mapfiles=true;
单个文件过大可以设置map的个数
hive数据倾斜原因以及解决办法的更多相关文章
- Hive 数据倾斜原因及解决方法(转)
在做Shuffle阶段的优化过程中,遇到了数据倾斜的问题,造成了对一些情况下优化效果不明显.主要是因为在Job完成后的所得到的Counters是整个Job的总和,优化是基于这些Counters得出的平 ...
- HBase快照迁移数据失败原因及解决办法
目录 目录 1 1. 背景 1 2. 环境 1 3. 执行语句 1 4. 问题描述 1 5. 错误信息 2 6. 问题原因 3 7. 解决办法 4 1. 背景 机房裁撤,需将源HBase集群的数据迁移 ...
- Spark产生数据倾斜的原因以及解决办法
Spark数据倾斜 产生原因 首先RDD的逻辑其实时表示一个对象集合.在物理执行期间,RDD会被分为一系列的分区,每个分区都是整个数据集的子集.当spark调度并运行任务的时候,Spark会为每一个分 ...
- 实战 | Hive 数据倾斜问题定位排查及解决
Hive 数据倾斜怎么发现,怎么定位,怎么解决 多数介绍数据倾斜的文章都是以大篇幅的理论为主,并没有给出具体的数据倾斜案例.当工作中遇到了倾斜问题,这些理论很难直接应用,导致我们面对倾斜时还是不知所措 ...
- .Net内存泄露原因及解决办法
.Net内存泄露原因及解决办法 1. 什么是.Net内存泄露 (1).NET 应用程序中的内存 您大概已经知道,.NET 应用程序中要使用多种类型的内存,包括:堆栈.非托管堆和托管堆.这里我们需 ...
- HttpClient的CircularRedirectException异常原因及解决办法
HttpClient的CircularRedirectException异常原因及解决办法 这两天在使用我自己爬虫抓取网页的时候总是出现 org.apache.http.client.ClientPr ...
- mysql保存中文乱码的原因和解决办法
当你遇到这个mysql保存中文乱码问题的时候,期待找到mysql保存中文乱码的原因和解决办法这样一篇能解决问题的文章是多么激动人心. 也许30%的程序员会选择自己百度,结果发现网友已经贴了很多类 ...
- html页面顶部出现一段空白,检查控制台发现body 下出现字符,原因及解决办法
html页面顶部出现一段空白,检查控制台发现body 下出现字符,原因及解决办法 分析: 原来是页面编码时增加了BOM,此页面后端数据主要是PHP语言,对PHP来讲PHP在设计时 ...
- mysql数据库死锁的产生原因及解决办法
这篇文章主要介绍了mysql数据库锁的产生原因及解决办法,需要的朋友可以参考下 数据库和操作系统一样,是一个多用户使用的共享资源.当多个用户并发地存取数据 时,在数据库中就会产生多个事务同时存取同 ...
随机推荐
- linux lftp
1.登录 lftp 用户名@站点 口令: 例如: lftp jiangzhaowei@192.168.199.73 口令:****** lftp jiangzhaowei@192.168.199.73 ...
- Random 中的种子怎么理解
种子就是生成随机数的根,就是产生随机数的基础.计算机的随机数都是伪随机数,以一个真随机数(种子)作为初始条件,然后用一定的算法不停迭代产生随机数.Java项目中通常是通过Math.random方法和R ...
- 关于java中Static关键字的加强理解
static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键字的用法和平常容易误解的地方,最后列 ...
- Building the Unstructured Data Warehouse: Architecture, Analysis, and Design
Building the Unstructured Data Warehouse: Architecture, Analysis, and Design earn essential techniqu ...
- PAT 乙级 1036 跟奥巴马一起编程(15) C++版
1036. 跟奥巴马一起编程(15) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 美国总统奥巴马不仅呼吁所有人 ...
- 智行火车票免费加速到VIP最高速抢票(不用朋友积攒或者购买加速包)
更新: 2018.11.07, 昨天我买火车票,已经不行了,这个bug已经没有了,被修复了, 望大家知悉!!! 智行火车票免费加速到VIP最高速抢票(不用朋友积攒或者购买加速包) 1)下过单后选择抢到 ...
- 数据迁移_老集群RAC迁移数据恢复到新集群RAC
数据迁移_老集群RAC迁移数据恢复到新集群RAC 作者:Eric 微信:loveoracle11g 1.把老集群RAC备份的数据远程拷贝到新集群RAC [root@old-rac-node1 ~]# ...
- python容器数据类型的特色
python容器数据类型的特色 list: 可变数据类型(不可哈希), 有序, 可索引获取, 可修改 Dict: 可变数据类型(不可哈希), 3.6版本有序, 可通 ...
- Delphi2010/XE2下隐藏程序系统任务栏的图标
Delphi7代码: SetWindowLong(Application.Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW); 以上的代码在Delphi7中可以用,但是在Delp ...
- (转)深入sql server中的事务
原文地址:http://www.cnblogs.com/chnking/archive/2007/05/27/761209.html 参考文章:http://www.cnblogs.com/zhuif ...