目录
这篇文章给大家介绍两种数据倾斜的代码层解决方案。
方案1:硬编码,将倾斜的值打散。
方案2:map join
背景:多张表在进行关联时,可能有一个key的值非常多,导致某个reduce处理时间过久,此时产生了数据倾斜。
方案一 硬编码
方案1是用拆分空值和总量较多的key值进行优化。
举例:table 2和table 1关联,key为ucid,table 2 的ucid非常随机,且有一两条ucid为-911的数据,总体没有倾斜。
table1的数据中有许多ucid=-911的数据,假如说是1000w条,那么在关联的时候肯定会出现数据倾斜。
先判断这部分key值是否实际有用,如果没有用,直接转换成随机值,将数据打散。
关联条件为:
on if(table1.ucid=-911,rand(),table1.ucid) = table2.ucid
如果-911的数据是有用的,则需要做其它处理。
在table1中将-911的数据进行“分裂”处理:
if(table1.ucid=-911,concat(table1.ucid,'_',pmod(ceil(rand()*1000000),10)),table1.ucid) as table1.ucid
<