栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

数据倾斜总结

数据倾斜总结

1.什么是数据倾斜
数据倾斜就是数据大量集中在一个点使得任务执行缓慢或者失败。
2.数据倾斜的表现
表现是使得在执行数据处理的时候,绝大部分任务在合理或者较快的时间内完成,而少数一两个任务则非常耗时,进展缓慢,严重的可能会oom(内存溢出)任务失败。
3.数据倾斜的原因
(1)key分布不均匀;
(2)实际业务情况;
(3)建表设计不合理;
(4)hql语句本身存在倾斜。
3.容易出现数据倾斜的情况
(1) group by的时候维度过少,使得少数几个维度数量过大;
(2)count(distinct),某个特殊值过多,使得处理该特殊值的reduce非常耗时;
(3)join的时候,某个值记录多,使得reduce任务重;
综合这三种情况,可以总结为某个值或者某几个值数量大占比重,使得reduce负载大,使得运行缓慢。
4.解决方案
(1)增加jvm;通过增加硬件的能力来降低时长,但是这只能缓解,不能根本解决;
(2)hive.map.aggr,默认值为true,通过将聚合操作转移到map端执行,降低reduce的压力;
(3)hive.groupby.skewindata,意为在做聚合操作的的时候,不讲同一个数值分配给一个reduce,而是随机分发,在reduce段做聚合,完成之后再起新一轮的mr操作任务进行最终聚合,实际效果可能不太明显,
(4)对于空值产生的数据倾斜,一:允许的情况下直接过滤掉空值再关联;二:把空值转换成添加一个随机数,而null值本身关联不上。
(5)数据类型不同的关联,由于数据类型不同使得每个数据类型的数据会被分到一个reduce,应从数据上着手解决;
(6)大小表关联的时候,可以将小表数据全部加载进map端,避免reduce task,在 hive0.11 版本以后会自动开启 map join 优化,由两个参数控制:
set hive.auto.convert.join=true;//设置 MapJoin 优化自动开启;
set hive.mapjoin.smalltable.filesize=25000000//设置小表不超过多大时开启 mapjoin 优化。
(7)大表关联大表,就是将大表切分成小表进行map join处理

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/584676.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号