问题描述:
无效 id (比如 -99 , ’’, null 等) 关联时产生的数据倾斜问题。
数据倾斜通俗来说就是大量的相同key被partition分配到一个分区里,造成了'一个人累死,其他人闲死'的情况。
这种情况下,最容易导致ETL运行失败,例如:销售明细数据(1.8亿行)与 会员信息维表 进行左关联的时候,耗时2小时也没能跑出来,报错原因是超时。
产生原因
销售明细数据(1.8亿行)与 会员信息维表 的关联 key为 会员卡号,左表1.8亿行中有1.1亿的会员卡号为null,这些相同的key被一个分区里导致出现一个超级大的任务,这个任务会导致超时。
解决方法
方案一:先筛选出key为非null的数据进行关联操作,再把key为null的数据拼接回去;
方案二: 把空值的 key 变成一个字符串加上随机数,就能把倾斜的数据分到不同的reduce上(进行分块),解决数据倾斜问题。