- 浏览: 550727 次
- 性别:
- 来自: 西安
博客专栏
-
Hive入门
浏览量:44351
文章分类
最新评论
-
freeluotao:
public void readFields(D ...
MapReduce直接连接Mysql获取数据 -
passionke:
在spark-sql中通过insert插入数据到HBase表时 ...
SparkSQL读取HBase数据 -
annmi_cai:
好好学习,天天向上!
[一起学Hive]之十七-从Hive表中进行数据抽样-Sampling -
annmi_cai:
好好学习,天天向上!
[一起学Hive]之十六-Hive的WEB页面接口-HWI -
annmi_cai:
好好学习,天天向上!
[一起学Hive]之十五-分析Hive表和分区的统计信息(Statistics)
1. 需求与现状:
源表:pcup_3month_login_dtl_mes , 记录数12亿,文件数 300
统计SQL:
insert overwrite table pcup_logininfo_tmp partition(data_type = 1) select popt_id, null as sndaid, count(distinct case when login_date>='2012-02-01' and login_date<'2012-05-01' then login_date else null end) as m3_login, null as m3_login_top5, count(distinct case when login_date>='2012-05-01' and login_date<='2012-05-09' then login_date else null end) as mn_login, null as mn_login_top5, null as m3_apptype, null as mn_apptype, count(distinct case when login_date>='2012-02-01' and login_date<'2012-05-01' and apptypeid='1' then login_date else null end) as m3_g_login, null as m3_g_login_top5, count(distinct case when login_date>='2012-02-01' and login_date<'2012-05-01' and apptypeid='2' then login_date else null end) as m3_l_login, null as m3_l_login_top5, count(distinct case when login_date>='2012-02-01' and login_date<'2012-05-01' and apptypeid='3' then login_date else null end) as m3_s_login, null as m3_s_login_top5, count(distinct case when login_date>='2012-02-01' and login_date<'2012-05-01' and apptypeid='4' then login_date else null end) as m3_o_login, null as m3_o_login_top5, count(distinct case when login_date>='2012-05-01' and login_date<='2012-05-09' and apptypeid='1' then login_date else null end) as mn_g_login, null as mn_g_login_top5, count(distinct case when login_date>='2012-05-01' and login_date<='2012-05-09' and apptypeid='2' then login_date else null end) as mn_l_login, null as mn_l_login_top5, count(distinct case when login_date>='2012-05-01' and login_date<='2012-05-09' and apptypeid='3' then login_date else null end) as mn_s_login, null as mn_s_login_top5, count(distinct case when login_date>='2012-05-01' and login_date<='2012-05-09' and apptypeid='4' then login_date else null end) as mn_o_login, null as mn_o_login_top5 from pcup_3month_login_dtl_mes group by popt_id;
特点:group by 维度少,多字段count(distinct), reduce task非常少(7个)
耗时:1个半小时以上
2. 优化思路:
利用union all + group by + rownumber 代替所有的count(distinct);
根据文件大小设置合理的reduce task数量;
3. 优化后的代码:耗时20分钟左右
SET mapred.reduce.tasks = 100;
//初步过滤+去重
create table lxw_test3 as select popt_id,login_date,apptypeid from pcup_3month_login_dtl_mes where login_date>='2012-02-01' and login_date <= '2012-05-09' group by popt_id,login_date,apptypeid;
//利用rownumber 函数做去重标记
add jar hdfs://nn.dc.sh-wgq.sdo.com:8020/group/p_sdo_data/udf/snda_udf.jar; CREATE TEMPORARY FUNCTION row_number AS 'com.snda.hive.udf.UDFrow_number'; create table lxw_test4 as select type,popt_id,login_date,row_number(type,login_date,popt_id) as rn from ( select type,popt_id,login_date from ( select 'm3_login' as type,popt_id,login_date from lxw_test3 where login_date>='2012-02-01' and login_date<'2012-05-01' union all select 'mn_login' as type,popt_id,login_date from lxw_test3 where login_date>='2012-05-01' and login_date<='2012-05-09' union all select 'm3_g_login' as type,popt_id,login_date from lxw_test3 where login_date>='2012-02-01' and login_date<'2012-05-01' and apptypeid='1' union all select 'm3_l_login' as type,popt_id,login_date from lxw_test3 where login_date>='2012-02-01' and login_date<'2012-05-01' and apptypeid='2' union all select 'm3_s_login' as type,popt_id,login_date from lxw_test3 where login_date>='2012-02-01' and login_date<'2012-05-01' and apptypeid='3' union all select 'm3_o_login' as type,popt_id,login_date from lxw_test3 where login_date>='2012-02-01' and login_date<'2012-05-01' and apptypeid='4' union all select 'mn_g_login' as type,popt_id,login_date from lxw_test3 where login_date>='2012-05-01' and login_date<='2012-05-09' and apptypeid='1' union all select 'mn_l_login' as type,popt_id,login_date from lxw_test3 where login_date>='2012-05-01' and login_date<='2012-05-09' and apptypeid='2' union all select 'mn_s_login' as type,popt_id,login_date from lxw_test3 where login_date>='2012-05-01' and login_date<='2012-05-09' and apptypeid='3' union all select 'mn_o_login' as type,popt_id,login_date from lxw_test3 where login_date>='2012-05-01' and login_date<='2012-05-09' and apptypeid='4' ) x distribute by type,login_date,popt_id sort by type,login_date,popt_id ) y;
//用普通的聚合函数进行汇总
insert overwrite table pcup_logininfo_tmp partition(data_type = 99) select popt_id, null as sndaid, sum(case when type = 'm3_login' and rn = 1 then 1 else 0 end) as m3_login, null as m3_login_top5, sum(case when type = 'mn_login' and rn = 1 then 1 else 0 end) as mn_login, null as mn_login_top5, null as m3_apptype, null as mn_apptype, sum(case when type = 'm3_g_login' and rn = 1 then 1 else 0 end) as m3_g_login, null as m3_g_login_top5, sum(case when type = 'm3_l_login' and rn = 1 then 1 else 0 end) as m3_l_login, null as m3_l_login_top5, sum(case when type = 'm3_s_login' and rn = 1 then 1 else 0 end) as m3_s_login, null as m3_s_login_top5, sum(case when type = 'm3_o_login' and rn = 1 then 1 else 0 end) as m3_o_login, null as m3_o_login_top5, sum(case when type = 'mn_g_login' and rn = 1 then 1 else 0 end) as mn_g_login, null as mn_g_login_top5, sum(case when type = 'mn_l_login' and rn = 1 then 1 else 0 end) as mn_l_login, null as mn_l_login_top5, sum(case when type = 'mn_s_login' and rn = 1 then 1 else 0 end) as mn_s_login, null as mn_s_login_top5, sum(case when type = 'mn_o_login' and rn = 1 then 1 else 0 end) as mn_o_login, null as mn_o_login_top5 from lxw_test4 group by popt_id
发表评论
-
MapReduce和Hive支持递归子目录作为输入
2015-07-08 14:41 3193关键字:MapReduce、Hive ... -
Hadoop生态系统官网、下载地址、文档
2015-05-05 17:22 1873Apache版本: Hadoop官网:http:// ... -
大数据平台任务调度监控系统
2014-10-24 16:35 10589记录一下正在开发 ... -
Hive over HBase和Hive over HDFS性能比较分析
2014-01-22 16:16 7820环境配置: hadoop-2.0.0-cdh4.3 ... -
MapReduce直接连接Mysql获取数据
2013-05-31 17:29 6351Mysql中数据: mysql> select ... -
MapReduce读取HDFS,将结果写入MongoDB
2013-05-29 11:07 5144参考:http://docs.mongodb.org/eco ... -
Kerboers认证由于和Master时间不同步导致的错误
2013-04-03 15:56 4014刚发现Hbase集群一台RegionServer挂掉了,重 ... -
hadoop mapreduce程序jar包版本冲突解决方法
2013-01-08 16:34 3468写MR程序时往往会使用到第三方包, 如果这些包在集群中不存在, ... -
hadoop mapreduce程序jar包版本冲突解决方法
2013-01-08 16:08 0<!-- [if gte mso 9]><x ... -
windows上编译eclipse-plugin for hadoop-0.20.2-cdh3u3
2012-12-17 17:24 2608hadoop-0.20.2-cdh3u3目录为:E:\hado ... -
hadoop-error:DiskChecker$DiskErrorException: Invalid volume failure config value
2012-12-17 13:33 39012012-12-17 10:58:59,925 ERROR o ... -
hbase错误 ZooKeeperConnectionException
2012-11-08 09:12 3719用hbase的rest服务给业务方提供web访问接口, 经常 ... -
【收藏】hadoop hdfs命令
2012-11-06 09:37 1493cat 使用方法:hadoop fs -cat URI [U ... -
hive本地mr
2012-10-23 11:03 5564如果在hive中运行的sql本身数据量很小,那么使用本地mr ... -
base64加密解密的hive udf函数
2012-07-12 12:28 7579依赖hadoop,hive相关包, 源码见附件。 a ... -
使用kerberos的hadoop选择java版本需注意
2012-07-12 09:51 6750使用kerberos的hadoop集群,如果在kerberos ... -
【转】Jobtracker重启Job recovery过程分析
2012-07-10 16:02 1796Jobtracker重启Job recovery ... -
windows下用eclipse连接linux中的hadoop,并执行mr
2012-07-09 18:05 41491. 准备: linux ... -
hadoop修改kerberos默认的配置文件
2012-07-05 15:23 2100kerberos默认的配置文件krb5.conf文件位于/et ... -
mapreduce报错:java.io.IOException: Split metadata size exceeded 10000000.
2012-06-21 15:46 7316Failure Info:Job initialization ...
相关推荐
针对Hive的性能优化,可以从多个角度入手,特别是在处理复杂的Join操作时。以下是根据标题、描述以及部分内容提炼出的关键知识点: 1. **Join操作优化**: - **Join顺序调整**:在Join操作中,应将较小的表或子...
总之,Hive的性能优化涉及到多个层面,包括数据处理策略、MapReduce参数调优以及JOIN操作的设计。通过上述方法,我们可以有效地提升Hive查询的速度和资源利用率,为大数据分析提供更高效的平台。
通过对Hive及其底层Hadoop的理解,结合实际案例分析,我们可以看到Hive优化是一个综合性的工作,涉及模型设计、查询优化、配置调整等多个方面。只有综合考虑各种因素,才能最大程度地发挥Hive的能力,提高大数据处理...
4. **避免大量使用 `count(distinct)`**:在大数据量下,`count(distinct)` 效率低,因为它需要分组和排序,可以考虑使用其他方法如 BitMap 来优化。 5. **合并小文件**:小文件会导致更多的 Map 任务,影响调度...
### Hive SQL性能优化详解 #### 一、Hive SQL执行顺序及原理 了解Hive SQL的执行顺序,有助于我们写出更高效、更高质量的代码。Hive SQL的执行大致可以分为以下几个步骤: 1. **确定数据源**:首先确定查询的数据...
- **第一种**:仍然按照单个Distinct字段的方式进行,但这种方式无法对多个Distinct字段分别排序,需要在Reduce阶段使用Hash表来去重。 - **第二种**:对所有Distinct字段进行编号,每行数据生成多行数据,使得...
3. **聚合操作**:SUM和COUNT这类聚合操作通常不会引起数据倾斜问题,而COUNT(DISTINCT)则容易出现问题。 #### 二、Hive优化的关键点 1. **模型设计**:良好的数据模型可以大大减少后续处理过程中的复杂度,避免...
同时,Hive QL也支持COUNT(DISTINCT ...)功能,可以用来统计唯一值的数量。以下例子展示了如何计算每个pageid的唯一userid数量: ```sql SELECT pageid, COUNT(DISTINCT userid) FROM page_view GROUP BY pageid; `...
2. Hive的复杂HQL语句会转换成多个MapReduce Job,并行或串行执行,Job数比较多的作业运行效率相对比较低。 3. 聚合操作如sum、count、max、min、UDAF等不会受到数据倾斜的影响,因为MapReduce在Map阶段的预聚合操作...
SELECT user_id, COUNT(DISTINCT video_id) as watched_videos FROM user_info GROUP BY user_id ORDER BY watched_videos DESC LIMIT 10; ``` 此外,Hive还支持分区,这对于大型数据集尤其有用,可以提高查询效率...
SELECT date, COUNT(DISTINCT player_id) AS daily_logins FROM game_login GROUP BY date; ``` 5. **优化查询性能**:Hive支持多种优化策略,如添加外部表、使用bucketing和skewjoin处理倾斜数据、使用Tez或...
在大数据处理领域,Hive...总结,Hive.ziphive数据迁移和数据分析涉及多个环节,从数据的导入、存储压缩到查询分析和结果导出,每个步骤都需精心设计和优化。理解并掌握这些知识点,对于大数据处理和分析工作至关重要。
大表与大表 Join,分桶的判断字段有很多空值或 null 值,导致某个 Reduce 处理的数据量远远高于平均值。 2. 原因:key 分布不均匀、业务数据本身的特性、建表时考虑不周、某些 SQL 语句本身就有数据倾斜。 3. 表现:...
- **BR(Bounce Rate)**:跳出率,计算方法是`select tab1.a/tab2.b from (select count(*)as a from dataclear where sscount=0 and reportTime="2018-01-08")as tab1,(select count(distinct ssid)as b from ...
SELECT key, count(DISTINCT value) FROM src GROUP BY key; ``` 这是一个简单的分组查询示例,它计算每个`key`对应的唯一`value`的数量。 #### Hive查询语言详解 HiveQL支持丰富的SQL特性,包括但不限于: - **...
为了更好地理解 Hive 的工作原理及其优化技巧,我们可以通过具体的案例来进一步探讨。 假设有一个包含用户浏览行为的日志表 `page_view`,以及用户基本信息表 `user`。我们的目标是统计每个页面的访问人数及年龄...