数据倾斜解决方法,通常从以下几个方面进行考量:

 业务上丢弃
 
•  不参与关联:在on条件上直接过滤
•  随机数打散:比如 null、空格、0等“Other”性质的特殊值 
 
倾斜键记录单独处理
 
•  Join:找出倾斜key,把对应数据插入临时表,如果该表是小表,使用map join解决;
•  Group by: set hive.groupby.skewindata = true
 
 数据重分布
 
•  语法:Distribute By
•  场景:为下一个Stage的Map输入做负载均衡
•  代价:多一个Job 

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

 

举个栗子:count distinct

--count(distinct ),在数据量大的情况下,效率较低,如果是多count(distinct )效率更低,因为count(distinct)是按group by 字段分组,按distinct字段排序,一般这种分布方式是很倾斜的。

   *淘宝一天30亿的pv,按性别分组,分配2个reduce,每个reduce处理15亿数据。

   *58房产一天1.5亿的pv,统计全国分二手房、租房等业务线的详情页pv、uv等指标,采用多case when的方式,仅分配一个reduce。

消除count disitnct,可以尝试“用户标签”法。

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄