欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

hive优化-数据倾斜优化

程序员文章站 2022-07-05 13:40:29
数据倾斜解决方法,通常从以下几个方面进行考量: 业务上丢弃 • 不参与关联:在on条件上直接过滤 • 随机数打散:比如 null、空格、0等“Other”性质的特殊值 倾斜键记录单独处理 • Join:找出倾斜key,把对应数据插入临时表,如果该表是小表,使用map join解决; • Group ......

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

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

 

举个栗子: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,可以尝试“用户标签”法。