美文网首页
Hive数据倾斜与解决办法

Hive数据倾斜与解决办法

作者: 小北觅 | 来源:发表于2018-10-15 09:01 被阅读85次

    数据倾斜是进行大数据计算时最经常遇到的问题之一。当我们在执行HiveQL或者运行MapReduce作业时候,如果遇到一直卡在map100%,reduce99%一般就是遇到了数据倾斜的问题。数据倾斜其实是进行分布式计算的时候,某些节点的计算能力比较强或者需要计算的数据比较少,早早执行完了,某些节点计算的能力较差或者由于此节点需要计算的数据比较多,导致出现其他节点的reduce阶段任务执行完成,但是这种节点的数据处理任务还没有执行完成。

一、数据倾斜原因

数据倾斜就是key分布不均匀,分发到不同的reduce上,个别reduce任务特别重,导致其他reduce都完成,而这些个别的reduce迟迟不完成的情况。导致数据倾斜的原因有:
1、key分布不均匀
2、map端数据倾斜,输入文件太多且大小不一
3、reduce端数据倾斜,分区器问题
4、业务数据本身的特征

二、解决方案

1、参数调节:
设置 hive.map.aggr = true,Map端部分聚合,相当于Combiner。
设置 hive.groupby.skewindata = true,数据倾斜的时候进行负载均衡,查询计划生成两个MR job,第一个job先进行key随机分配处理,随机分布到Reduce中,每个Reduce做部分聚合操作,先缩小数据量。第二个job再进行真正的group by key处理,根据预处理的数据结果按照Group By Key分布到Reduce中(这个过程可以保证相同的Key被分布到同一个Reduce中),完成最终的聚合操作。

2、SQL语句优化:
①、大小表Join:
使用map join让小表(小于1000行)先进内存,在map端完成reduce。
注:map join就是在map端做join,map join会把小表全部读入内存中,在map阶段直接拿另外一个表的数据和内存中表数据做匹配。

②、大表Join大表:
大表连接大表时,如果是null值造成数据倾斜,那么把null值变成一个字符串加上随机数(赋予null值新的key值),把这部分倾斜的数据分发到不同的reduce上,由于这个字符串关联不上,处理后并不影响最终结果。

③、count distinct大量相同特殊值:
count distinct时,将值为null的情况单独处理,如果是计算count distinct,可以不用处理,直接过滤,在最后结果中加1。如果还有其他计算,需要进行group by,可以先将值为空的记录单独处理,再和其他计算结果进行union。

④、采用sum() group by的方式来代替count(distinct)完成计算:
select count(distinct colA) from table1;
select count(1) from (select colA from table1 group by colA) alias_1; group by也可以去重

3、特殊情况特殊处理:
在业务逻辑优化的效果不好的情况下,可以将倾斜的数据单独拿出来处理,最后union回去。

参考:
https://github.com/polaris6/BigDataLearning/blob/ab0c3b8b15963250e51ef82158c2a1159048262f/src/hive/data_skew

相关文章

  • Hive数据倾斜与解决办法

    数据倾斜是进行大数据计算时最经常遇到的问题之一。当我们在执行HiveQL或者运行MapReduce作业时候,如果遇...

  • Hive优化

    Hive数据倾斜优化总结 Hive数据倾斜优化分为配置优化和SQL优化 优先原则: 数据不怕多,避免倾斜。 减少J...

  • hive 优化-1

    join优化-数据倾斜hive.optimize.skewjoin=true; 【TODO 细节】数据倾斜时启动两...

  • Hive数据倾斜

    数据倾斜 map reduce任务执行时,reduce节点任务大部分执行完毕,但是有一或几个reduce任务运行很...

  • Hive 数据倾斜

    http://www.cnblogs.com/qingyunzong/p/8847597.htmlhttp://w...

  • HIVE:数据倾斜

    一、Map倾斜 根本原因:读入的文件块的数据分布不均匀。 1、上游表文件的大小不均匀,并且小文件特别多,导致当前表...

  • Hive 数据倾斜

    现象:任务卡在map 100% reduce 99%,分布式计算时, 优化目标:使map的结果更均匀的分布到red...

  • Hive数据倾斜

    原文链接:https://my.oschina.net/134596/blog/1800029 在做Shuffle...

  • hive 数据倾斜

    1、Hive 不同数据类型关联产生数据倾斜 情形:比如用户表中 user_id 字段为 int,log 表中 us...

  • hive的数据倾斜操作

    hive底层对应的是mr程序。需要注意数据倾斜问题: Hive进阶 数据倾斜 在我们数据清洗过程中,经常会出现一种...

网友评论

      本文标题:Hive数据倾斜与解决办法

      本文链接:https://www.haomeiwen.com/subject/zjlzgftx.html