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
where ‘20180401’<=dt and dt<=’20180418′ and 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
where ‘20180401’<=dt and dt<=’20180418′ and 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
where ‘20180401’<=dt and dt<=’20180418′ and 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
where ‘20180401’<=dt and dt<=’20180418′ and 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