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

                              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之后的数据进行操作。
       
       
        

你可能感兴趣的:(hive入门学习:数据倾斜的解决方案)