Hive任务优化

  1. rom logs
  2. where log_date = 20130803 and item_id = 3
  3. )t

设置Job间并行的参数是Hive.exec.parallel,将其设为true即可。默认的并行度为8,也就是最多允许sql中8个Job并行。如果想要更高的并行度,可以通过Hive.exec.parallel. thread.number参数进行设置,但要避免设置过大而占用过多资源。

减少Job数

另外在实际开发过程中也发现,一些实现思路会导致生成多余的Job而显得不够高效。比如这个需求:查询某网站日志中访问过页面a和页面b的用户数量。低效的思路是面向明细的,先取出看过页面a的用户,再取出看过页面b的用户,然后取交集,代码如下:

[js] view plaincopy

  1. select count(*)
  2. from
  3. (select distinct user_id
  4. from logs where page_name = ‘a’) a
  5. join
  6. (select distinct user_id
  7. from logs where blog_owner = ‘b’) b
  8. on a.user_id = b.user_id;

这样一来,就要产生2个求子查询的Job,一个用于关联的Job,还有一个计数的Job,一共有4个Job。

但是我们直接用面向统计的方法去计算的话(也就是用group by替代join),则会更加符合M/R的模式,而且生成了一个完全不带子查询的sql,只需要用一个Job就能跑完:

[js] view plaincopy

  1. select count(*)
  2. from logs group by user_id
  3. having (count(case when page_name = ‘a’ then 1 end) > 0
  4. and count(case when page_name = ‘b’ then 1 end) > 0)

第一种查询方法符合思考问题的直觉,是工程师和分析师在实际查数据中最先想到的写法,但是如果在目前Hive的query planner不是那么智能的情况下,想要更加快速的跑出结果,懂一点工具的内部机理也是必须的。(作者:孙逸 / 审校:刘亚琼)



作者介绍:孙逸,zamplus,数据仓库工程师。从事数据仓库平台建设与数据产品开发,热衷于研究大数据相关的计算技术,并应用于实践之中,让数据产生真正价值。

本文为CSDN原创文章,未经允许不得转载,如需转载请联系market#csdn.net(#换成@)

时间: 2024-12-12 03:47:40

Hive任务优化的相关文章

Hive ive优化 (important)

Hive ive优化 要点:优化时,把hive sql当做map reduce程序来读,会有意想不到的惊喜. 理解hadoop的核心能力,是hive优化的根本. 长期观察hadoop处理数据的过程,有几个显著的特征: 1.不怕数据多,就怕数据倾斜. 2.对jobs数比较多的作业运行效率相对比较低,比如即使有几百行的表,如果多次关联多次汇总,产生十几个jobs,没半小时是跑不完的.map reduce作业初始化的时间是比较长的. 3.对sum,count来说,不存在数据倾斜问题. 4.对count

一例 Hive join 优化实战

由于 hive 与传统关系型数据库面对的业务场景及底层技术架构都有着很大差异,因此,传统数据库领域的一些技能放到 Hive 中可能已不再适用.关于 hive 的优化与原理.应用的文章,前面也陆陆续续的介绍了一些,但大多都偏向理论层面,本文就介绍一个实例,从实例中一步步加深对 hive 调优的认识与意识. 1.需求 需求我做了简化,很简单,两张表做个 join,求指定城市,每天的 pv,用传统的 RDBMS SQL 写出来就这样的: SELECT t.statdate, c.cname, coun

Hive性能优化

架构层面优化: l  分表 l  合理利用中间结果集,避免查过就丢的资源浪费,减低Hadoop的IO负载 l  常用复杂或低效函数尽量不用或拆分成其他实现方式,如count(distinct) l  合理设计表分区,静态分区和动态分区 l  优化时一定要把握整体,单个作业最优不如整个作业最优. l  文件存储格式和压缩方式 l  Hadoop本身的优化 l  有些逻辑,使用系统函数可能比较复杂,可能涉及多层嵌套,建议使用自定义函数实现. 架构层面优化,我这里不做过多介绍了,写HQL时要时常考虑按

【转】Hive性能优化

1.概述 继续<那些年使用Hive踩过的坑>一文中的剩余部分,本篇博客赘述了在工作中总结Hive的常用优化手段和在工作中使用Hive出现的问题.下面开始本篇文章的优化介绍. 2.介绍 首先,我们来看看Hadoop的计算框架特性,在此特性下会衍生哪些问题? 数据量大不是问题,数据倾斜是个问题. jobs数比较多的作业运行效率相对比较低,比如即使有几百行的表,如果多次关联多次汇总,产生十几个jobs,耗时很长.原因是map reduce作业初始化的时间是比较长的. sum,count,max,mi

hive join 优化 --小表join大表

1.小.大表 join 在小表和大表进行join时,将小表放在前边,效率会高,hive会将小表进行缓存. 2.mapjoin 使用mapjoin将小表放入内存,在map端和大表逐一匹配,从而省去reduce. 例子: select /*+MAPJOIN(b)*/ a.a1,a.a2,b.b2 from tablea a JOIN tableb b ON a.a1=b.b1 在0.7版本后,也可以用配置来自动优化 set hive.auto.convert.join=true;

Hive性能优化(新手重新标注版)

以下是一个技术小白根据自己的理解能力在别人整理的基础上进行了一些重点标识和归纳. 一个Hive查询生成多个Map Reduce Job,一个Map Reduce Job又有Map,Spill,Shuffle,Sort,Reduce等多个阶段,所以针对Hive查询的优化可以大致分为针对MR中单个步骤的优化(其中又会有细分),针对MR全局的优化,和针对整个查询(多MR Job)的优化,下文会分别阐述. 在开始之前,先把MR的流程图帖出来(摘自Hadoop权威指南),方便后面对照.另外要说明的是,这个

深入浅出Hive企业级架构优化、Hive Sql优化、压缩和分布式缓存(企业Hadoop应用核心产品)

一.本课程是怎么样的一门课程(全面介绍)    1.1.课程的背景       作为企业Hadoop应用的核心产品,Hive承载着FaceBook.淘宝等大佬 95%以上的离线统计,很多企业里的离线统计甚至全由Hive完成,如我所在的电商.       Hive在企业云计算平台发挥的作用和影响愈来愈大,如何优化提速已经显得至关重要.       Hive作业的规模决定着优化层级,一个Hive作业的优化和一万的Hive作业的优化截然不同.       拥有1万多个Hive作业的大电商如何进行Hiv

hive SQL优化之distribute by和sort by

最近在优化hiveSQL, 下面是一段排序,分组后取每组第一行记录的SQL INSERT OVERWRITE TABLE t_wa_funnel_distinct_temp PARTITION (pt='${SRCTIME}') SELECT bussiness_id, cookie_id, session_id, funnel_id, group_first(funnel_name) funnel_name, step_id, group_first(step_name) step_name,

【Hive】优化策略

Hive对于表的操作大部分都是转换为MR作业的形式,为了提高OLAP[online analysis process 在线分析处理]的效率,Hive自身给出了很多的优化策略 1. explain[解释执行计划] 通过explain命令,可以查看Hive语句的操作情况,是否为慢查询,是否走索引,一目了然 explain select sum(...) from table_name; 2. 动态分区调整 hive.exec.dynamic.partition.mode = strict // 默认

hive sql 优化

sql优化: ---------------------------------------------------------------- 数据倾斜的处理方式: -- Q: 活动数据 和 对应的维表进行关联,其中某个活动特别的大. A: 1) 给关联健加入一个随机的 1-10的值 2)将维度表 的关联健, 每个加上 1-10的值,将维度表扩充十倍. 3)然后将2个表进行join,从而来消除数据倾斜. -- 尽量不使用count distinct 1) 通过select子查询优化 2) 通过建