Hive学习(6)hive.groupby.skewindata 和 hive.map.aggr 组合的坑

hive.map.aggr=true;

在map中会做部分聚集操作,效率更高但需要更多的内存。

hive.groupby.skewindata=true

数据倾斜时负载均衡,当选项设定为true,生成的查询计划会有两个MRJob。第一个MRJob 中,
Map的输出结果集合会随机分布到Reduce中,每个Reduce做部分聚合操作,并输出结果,这样处理的结果是相同的GroupBy Key
有可能被分发到不同的Reduce中,从而达到负载均衡的目的;第二个MRJob再根据预处理的数据结果按照GroupBy Key分布到
Reduce中(这个过程可以保证相同的GroupBy Key被分布到同一个Reduce中),最后完成最终的聚合操作。

但是两者组合使用,计算pv时候会出现错误,现象如下四个sql

前3个看问题,最后一个改进

一.

--注意配置参数
set hive.groupby.skewindata=false ;
set hive.map.aggr = true;

select dt,’整体’ as os,count(1) ,count(distinct device_id)
from ods_cre_news_click
where20180401<=dt and dt<=20180418and pagetype=’tianyi_nvideo’ and channel=’news_video’ and event_method !=’Android_Lite’
group by dt

结果:

20180408 整体 366030 86030
20180415 整体 459180 111333
20180409 整体 348939 82524
20180416 整体 418914 105665
20180417 整体 430969 105115
20180418 整体 426462 102444

二.

--注意配置参数
set hive.groupby.skewindata=true ;
set hive.map.aggr = false;

select dt,’整体’ as os,count(1) ,count(distinct device_id)
from ods_cre_news_click
where20180401<=dt and dt<=20180418and pagetype=’tianyi_nvideo’ and channel=’news_video’ and event_method !=’Android_Lite’
group by dt

结果:

20180408 整体 366030 86030
20180415 整体 459180 111333
20180409 整体 348939 82524
20180416 整体 418914 105665
20180417 整体 430969 105115
20180418 整体 426462 102444

三.

--注意配置参数
--配置参数同为true时会错误

set hive.groupby.skewindata=true ;
set hive.map.aggr = true;

select dt,’整体’ as os,count(1) ,count(distinct device_id)
from ods_cre_news_click
where20180401<=dt and dt<=20180418and pagetype=’tianyi_nvideo’ and channel=’news_video’ and event_method !=’Android_Lite’
group by dt

结果:

20180408 整体 253223 86030
20180415 整体 319272 111333
20180409 整体 248462 82524
20180416 整体 281923 105665
20180417 整体 289144 105115
20180418 整体 280593 102444

四:改进,把count改为sum

--注意配置参数
set hive.groupby.skewindata=true ;
set hive.map.aggr = true;

select dt,’整体’ as os,sum(1) ,count(distinct device_id)
from ods_cre_news_click
where20180401<=dt and dt<=20180418and pagetype=’tianyi_nvideo’ and channel=’news_video’ and event_method !=’Android_Lite’
group by dt

结果:

20180408 整体 366030 86030
20180415 整体 459180 111333
20180409 整体 348939 82524
20180416 整体 418914 105665
20180417 整体 430969 105115
20180418 整体 426462 102444

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值