Skip to content

程序员灯塔

Menu
  • Download
  • sitemap
  • 文章归档
  • 标签归档
  • 示例页面
Menu

hivesql : hive.groupby.skewindata 和hive.map.aggr 组合的坑

Posted on 2018 年 4 月 20 日

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
20180401        整体    394384  88374
20180402        整体    350275  83083
20180403        整体    362113  84762
20180410        整体    355632  84843
20180404        整体    362981  86480
20180411        整体    371531  95118
20180405        整体    407410  92178
20180412        整体    419627  108835
20180406        整体    386203  88369
20180413        整体    456934  114080
20180407        整体    381992  87484
20180414        整体    480010  115757
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
20180401        整体    394384  88374
20180402        整体    350275  83083
20180403        整体    362113  84762
20180410        整体    355632  84843
20180404        整体    362981  86480
20180411        整体    371531  95118
20180405        整体    407410  92178
20180412        整体    419627  108835
20180406        整体    386203  88369
20180413        整体    456934  114080
20180407        整体    381992  87484
20180414        整体    480010  115757
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 = 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
20180401        整体    267833  88374
20180402        整体    246562  83083
20180403        整体    246095  84762
20180410        整体    242038  84843
20180404        整体    253287  86480
20180411        整体    265535  95118
20180405        整体    279676  92178
20180412        整体    298332  108835
20180406        整体    273046  88369
20180413        整体    325518  114080
20180407        整体    257079  87484
20180414        整体    324205  115757
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

20180401        整体    394384  88374
20180402        整体    350275  83083
20180403        整体    362113  84762
20180410        整体    355632  84843
20180404        整体    362981  86480
20180411        整体    371531  95118
20180405        整体    407410  92178
20180412        整体    419627  108835
20180406        整体    386203  88369
20180413        整体    456934  114080
20180407        整体    381992  87484
20180414        整体    480010  115757
20180408        整体    366030  86030
20180415        整体    459180  111333
20180409        整体    348939  82524
20180416        整体    418914  105665
20180417        整体    430969  105115
20180418        整体    426462  102444

近期文章

  • 技术网站
  • 世界,您好!
  • Git学习记录(learngitbranching.js.org)
  • 阿里职场潜规则
  • 寻找两个正序数组的中位数

近期评论

  1. 一位 WordPress 评论者 发表在 世界,您好!

归档

  • 2024 年 9 月
  • 2024 年 3 月
  • 2022 年 12 月
  • 2021 年 8 月
  • 2021 年 6 月
  • 2021 年 3 月
  • 2021 年 2 月
  • 2020 年 11 月
  • 2020 年 5 月
  • 2020 年 3 月
  • 2019 年 11 月
  • 2019 年 10 月
  • 2019 年 9 月
  • 2019 年 7 月
  • 2019 年 6 月
  • 2019 年 5 月
  • 2019 年 3 月
  • 2018 年 9 月
  • 2018 年 8 月
  • 2018 年 7 月
  • 2018 年 4 月
  • 2018 年 2 月
  • 2018 年 1 月
  • 2017 年 12 月
  • 2017 年 11 月
  • 2017 年 10 月
  • 2017 年 8 月
  • 2017 年 7 月

分类目录

  • 未分类
©2025 程序员灯塔 | Design: Newspaperly WordPress Theme