大数据相关知识 - wtdig/study GitHub Wiki
知识点
1、数据倾斜处理
概念:数据倾斜是由于数据的原因,在shuffle时,大部分的数据因为key相同分发到少量的几个节点上进行处理,从而导致这几个节点负载很大,甚至宕机,
最终体现是整个任务很慢,查看日志可以看到某几个节点处理时间特别长,比其他的都长。 现实例子 如窗口买票,有的景点排队人特别多,
有的排队人很少。
解决数据倾斜方法:
1)、如果因为null,则将null替换成随机数
2)、如果是join,并且其中一张表足够小,则采用map join,
3)、如果是group by 则通过二次mr处理,第一次mr 给那个key加一个10以内随机数前缀,也可以100,
根据数据量而定,这样可以将数据随机分散到各个节点做第一次groupby ,第二次groupby 将前缀去掉再做一次groupby
4)、如果是spark,如果join的两张都是大表不能使用map join,就通过扩展表的方式达到随机,即左表key前缀随机加1-n的随机数,
右表每条记录都添加1-n的前缀随机数,然后join,这个方法慎用,会导致数据扩增n倍
5)、如果业务允许,过滤掉倾斜的数据即可