首页 > 代码库 > Hive语法层面优化之一数据倾斜介绍
Hive语法层面优化之一数据倾斜介绍
数据倾斜:数据分布不均匀,造成数据大量的集中到一点,造成数据热点;
由于数据并不是平均分配的,会导致各个节点上处理的数据量是不均衡的,所以数据倾斜是无法避免的;
造成数据倾斜的最根本原因:key分发不均匀造成的;
常见的数据倾斜的症状
1) Map阶段快,reduce阶段非常慢;
2) 某些map很快,某些map很慢;
3) 某些reduce很快,某些reduce很慢;
4) 任务进度长时间维持在99%(或100%),查看任务监控页面,发现只有少量(1个或几个)reduce子任务未完成,因为其处理的数据量和其他reduce差异过大。
造成数据倾斜的常见原因
1) key分布不均匀;
2) 某些sql语句本身就有数据倾斜;
a) join时on关键字中个别值量很大(如:null值),同key会被分发到同一个reduce去执行造成某个节点数据量很大;----需要重点研究并优化的部分
b) count(distinct)在数据量很大的情况下,容易数据倾斜,因为count(distinct)是按照group by字段分组,再按照distinct字段排序。(group by也是按照key进行分发的,有的分发的数据量很大,有的数据量很小,导致数据倾斜的发生); ----有时无法避免
3) 数据在节点上分布不均匀(集群需要及时扩容,会经常有上线/下线节点的)----无法避免的;
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。