数据倾斜的原因以及怎么去解决

数据倾斜的原因
1.key 分布不均匀
2.业务数据本身的特性
3.SQL 语句造成数据倾斜
如何解决数据倾斜
1.hive 设置 hive.map.aggr=true,hive.groupby.skewindata=true

2.有数据倾斜的时候进行负载均衡,当选项设定为 true,生成的查询计划会有两个 MR Job。第一个 MR Job 中, Map 的输出结果集合会随机分布到 Reduce 中,每个 Reduce 做部分聚合操作,并输出结果,这样处理的结果是相同 Group By Key 有可能被分发到不同的 Reduce 中,从而达到负载均衡的目的;第二个 MR Job 在根据预处理的数据结果按照Group By Key 分布到 Reduce 中(这个过程可以保证相同的 Group By Key 被分布到同一个 Reduce 中),最后完成最终的聚合操作。

3.SQL 语句调整:
1.选用 join key 分布最均匀的表作为驱动表。做好列裁剪和 filter 操作,以达到两表join 的时候,数据量相对变小的效果。
2.大小表 Join: 使用 map join 让小的维度表(1000 条以下的记录条数)先进内存。在 Map 端完成 Reduce。
3.大表 Join 大表:把空值的 Key 变成一个字符串加上一个随机数,把倾斜的数据分到不同的 reduce 上,由于 null 值关联不上,处理后并不影响最终的结果。
4.count distinct 大量相同特殊值:count distinct 时,将值为空的情况单独处理,如果是计算 count distinct,可以不用处理,直接过滤,在做后结果中加 1。如果还有其他计算,需要进行 group by,可以先将值为空的记录单独处理,再和其他计算结果进行 union。

你可能感兴趣的:(数据倾斜的原因以及怎么去解决)