数据倾斜:数据分布不均匀,造成数据大量的集中到一点,造成数据热点;
由于数据并不是平均分配的,会导致各个节点上处理的数据量是不均衡的,所以数据倾斜是无法避免的;
造成数据倾斜的最根本原因: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) 数据在节点上分布不均匀(集群需要及时扩容,会经常有上线/下线节点的)----无法避免的;
Hive语法层面优化之一数据倾斜介绍,布布扣,bubuko.com
时间: 2024-10-22 02:47:36