hive数据倾斜的解决办法
数据倾斜是进行大数据计算时常见的问题。主要分为map端倾斜和reduce端倾斜,map端倾斜主要是因为输入文件大小不均匀导致,reduce端主要是partition不均匀导致。
在hive中遇到数据倾斜的解决办法:
一、倾斜原因:map端缓慢,输入数据文件多,大小不均匀
当出现小文件过多,需要合并小文件。可以通过set hive.merge.mapfiles=true来解决。
set hive.map.aggr=true; //map端部分聚合,相当于Combiner,可以减小压力(默认开启)
set hive.groupby.skewindata=true(默认关闭);//有数据倾斜的时候进行负载均衡,当选项设定为 true,生成的查询计划会有两个 MR Job。第一个 MR Job 中,Map 的输出结果集合会随机分布到 Reduce 中,每个 Reduce 做部分聚合操作,并输出结果,这样处理的结果是相同的 Group By Key 有可能被分发到不同的 Reduce 中,从而达到负载均衡的目的;第二个 MR Job 再根据预处理的数据结果按照 Group By Key 分布到 Reduce 中(这个过程可以保证相同的 Group By Key 被分布到同一个 Reduce 中),最后完成最终的聚合操作。
单个文件大小稍稍大于配置的block块的大写,此时需要适当增加map的个数。解决方法:set mapred.map.tasks个数
文件大小适中,但map端计算量非常大,如select id,count(*),sum(case when...),sum(case when...)...需要增加map个数。解决方法:set mapred.map.tasks个数,set mapred.reduce.tasks个数
二、当遇到一个大表和一个小表进行join操作时
解决方法:小表在join左侧,大表在右侧,或使用mapjoin 将小表加载到内存中。然后再对比较大的表进行map操作。
join就发生在map操作的时候,这里的join并不会涉及reduce操作。map端join的优势就是在于没有shuffle,
如:select /*+ MAPJOIN(a) */
a.c1, b.c1 ,b.c2 from a join b
where a.c1 = b.c1;
三、遇到需要进行join的但是关联字段有数据为null,如表一的id需要和表二的id进行关联,null值的reduce就会落到一个节点上
解决方法1:子查询中过滤掉null值,id为空的不参与关联
解决方法2:用case when给空值分配随机的key值(字符串+rand())
四、不同数据类型关联产生数据倾斜
场景:一张表s8的日志,每个商品一条记录,要和商品表关联。但关联却碰到倾斜的问题。s8的日志中有字符串商品id,也有数字的商品id,类型是string的,但商品中的数字id是bigint的。猜测问题的原因是把s8的商品id转成数字id做hash来分配reduce,所以字符串id的s8日志,都到一个reduce上了,解决的方法验证了这个猜测。
解决方法:把数字类型转换成字符串类型
Select * from s8_log aLeft outer join r_auction_auctions bOn a.auction_id = cast(b.auction_id as string);
五、当HiveQL中包含count(distinct)时
如果数据量非常大,执行如select a,count(distinct b) from t group by a;类型的SQL时,会出现数据倾斜的问题。
解决方法:使用sum...group by代替。如select a,sum(1) from (select a, b from t group by a,b) group by a;
六、join和Group的优化
2.1 对于普通的join操作,会在map端根据key的hash值,shuffle到某一个reduce上去,在reduce端做join连接操作,内存中缓存join左边的表,遍历右边的表,一次做join操作。所以在做join操作时候,将数据量多的表放在join的右边。
当数据量比较大,并且key分布不均匀,大量的key都shuffle到一个reduce上了,就出现了数据的倾斜。
在map端产生join
mapJoin的主要意思就是,当链接的两个表是一个比较小的表和一个特别大的表的时候,我们把比较小的table直接放到内存中去,然后再对比较大的表格进行map操作。join就发生在map操作的时候,每当扫描一个大的table中的数据,就要去去查看小表的数据,哪条与之相符,继而进行连接。这里的join并不会涉及reduce操作。map端join的优势就是在于没有shuffle,
2.2 对于Group操作,首先在map端聚合,最后在reduce端坐聚合,hive默认是这样的,以下是相关的参数
· hive.map.aggr = true是否在 Map 端进行聚合,默认为 True
· hive.groupby.mapaggr.checkinterval = 100000在 Map 端进行聚合操作的条目数目
转载自:https://www.cnblogs.com/kongcong/p/7777092.html
转载于:https://www.cnblogs.com/wangbin2188/p/10364375.html
hive数据倾斜的解决办法相关推荐
- 【HIVE数据倾斜常见解决办法】
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.什么是HIVE数据倾斜? 二.数据倾斜原因及解决办法 1. Join 倾斜 a. 大表 Join 小表 b. 大表 ...
- hive解决数据倾斜问题_Hive数据倾斜和解决办法
转自:https://blog.csdn.net/xinzhi8/article/details/71455883 操作: 关键词 情形 后果 Join 其中一个表较小,但是key集中 分发到某一个或 ...
- Hadoop数据倾斜及解决办法
数据倾斜:就是大量的相同key被partition分配到一个分区里,map /reduce程序执行时,reduce节点大部分执行完毕,但是有一个或者几个reduce节点运行很慢,导致整个程序的处理时间 ...
- hive数据倾斜及处理案例
什么是数据倾斜 数据倾斜其实是进行分布式计算的时候,某些节点的计算能力比较强或者需要计算的数据比较少,早早执行完了,某些节点计算的能力较差或者由于此节点需要计算的数据比较多,导致出现其他节点的redu ...
- Hive 数据倾斜问题定位排查及解决(实战)
多数介绍数据倾斜的文章都是以大篇幅的理论为主,并没有给出具体的数据倾斜案例.当工作中遇到了倾斜问题,这些理论很难直接应用,导致我们面对倾斜时还是不知所措. 今天我们不扯大篇理论,直接以例子来实践,排查 ...
- Hive数据倾斜解决方法总结
Hive数据倾斜解决方法总结 参考文章: (1)Hive数据倾斜解决方法总结 (2)https://www.cnblogs.com/kongcong/p/7777092.html 备忘一下.
- Hive 数据倾斜问题定位排查及解决(实际案例)
多数介绍数据倾斜的文章都是以大篇幅的理论为主,并没有给出具体的数据倾斜案例.当工作中遇到了倾斜问题,这些理论很难直接应用,导致我们面对倾斜时还是不知所措. 今天我们不扯大篇理论,直接以例子来实践,排查 ...
- HIVE 数据倾斜浅谈
HIVE 数据倾斜浅谈 一.数据倾斜现象 map100%,reduce一直卡在一个值,如99%. 二.数据倾斜的原因 数据按key的hash值分配到reduce中,如果有的key值比较集中,就 ...
- Hive数据倾斜优化
Hive数据倾斜 Group By 中的计算均衡优化 1.Map端部分聚合 先看看下面这条SQL,由于用户的性别只有男和女两个值 (未知).如果没有map端的部分聚合优化,map直接把groupby_ ...
最新文章
- 点云距离度量:完全解析EMD距离(Earth Mover's Distance)
- 高水平文章发表必备-数据分析和文献解读技巧
- python毫秒级时间戳
- uni-app——一种通过Nginx反向代理处理302重定向请求解决网络请求中无法获取Cookie的解决方案
- linux 将img写入硬盘,如何使用Etcher轻松将.img写入Mac上的SD卡
- [HDU 3625] Examining the Rooms(第一类斯特林数)
- VMware vSphere克隆虚拟机
- linux 7 定时任务设置,centos7 配置crontab定时任务
- 计算机中2的四次方为啥是4位,计算机基础试题2(4页)-原创力文档
- 计算机院校考研非歧视,2021考研昌吉学院学科教学(语文)045103调剂信息
- Kotlin入门(5)字符串及其格式化
- 【转载】ASP.NET MVC中Controller与View之间的数据传递总结
- 环境搭建-CentOS集群搭建
- [ROS]1 小乌龟
- 男人想要成功--必须明白的22个道理
- Ubuntu中安装ns3
- flatpak安装的firefox视频播放卡顿的解决方案
- 基于百度AI开放平台的人脸识别实验
- L-TAGE预测器 “A 256 Kbits L-TAGE branch predictor”
- Java机器人解密游戏_解谜类游戏 篇十:在机器人的世界中,那些隐藏在谜题之下的眼泪...