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,可以尝试“用户标签”法。
上一篇: 百度网盘文件优先下载怎么设置?