hive入门学习:数据倾斜的解决方案

  • Post author:
  • Post category:其他


hive入门学习:数据倾斜的解决方案


众所周知,shuffle是整个大数据框架的心脏,是整个奇迹发生的地方,当然,问题也就发生在shuffle这里,数据倾斜是经常发生在这里。这里主要讨论的就是和

数据倾斜

相关的解决方案。数据倾斜就是由于数据分布不均匀,数据大量集中到一点上,造成数据热点。大多数情况下,分为一下三种情况:

map端执行比较快,reduce执行很慢,因为partition造成的数据倾斜。

某些reduce很快,某些reduce很慢,也是因为

partition造成的数据倾斜。


某些map执行很快,某些map执行很慢,这是因为数据本身的分布的不合理性造成的。

造成上面reduce和map任务运行很缓慢本质上就两种情况,第一:reduce缓慢是因为partition造成滴。第二:map端缓慢是因为数据本身的分布不合理性。下面介绍map缓慢和reduce缓慢

reduce缓慢:两个table的join操作会造成数据倾斜,会造成reduce缓慢,这个相对比较好解决,我们不是有三种解决join性能的方案吗?mapjoin,common join,smbJoin可以解决数据倾斜。另外,有些情况下造成的reduce缓慢无法解决,因为数据本身也不是服从均匀分布。大多数还是高斯分布。

reduce性能本质上是由于groupby操作导致的,而count(distinct)内部本质也是有groupby实现

map端缓慢:这种情况是由于每条数据的相对位置造成的。有两种方案:

第一:设置在map端聚合,set hive.map.aggr=true 可以减小压力(默认开启)

第二:可以set hive.groupby.skewindata=true(默认关闭),此时hive的执行在MR后台会存在两个map一个reduce,第一个map本质上就是先对数据进行shuffle,第二个map就可以对shuffle之后的数据进行操作。





版权声明:本文为liyaohhh原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。