Hive优化

标签: hive 优化 | 发表时间:2014-05-08 10:29 | 作者:TonyLee0329
出处:http://www.iteye.com
     使用Hive有一段时间了,目前发现需要进行优化的较多出现在出现join、distinct的情况下,而且一般都是reduce过程较慢。
     Reduce过程比较慢的现象又可以分为两类:
情形一:map已经达到100%,而reduce阶段一直是99%,属于数据倾斜
情形二:使用了count(distinct)或者group by的操作,现象是reduce有进度但是进度缓慢,31%-32%-34%...一个附带的提示是使用reduce个数很可能是1
下面,笔者将以亲身经历的两次优化过程为例,给大家说明下笔者优化的思路及过程:
情形二(distinct):
示例sql:
select count(distinct A),count(B),count(distinct C) from T;

T的数据量峰值时候大概在2亿左右,文件大小约10G+,优化的思路:
1. 问题产生的RC是需要在大数据集下做多个字段的distinct,而且还是多个字段,所以最先需要设置set hive.groupby.skewindata=true
打散去重字段,但是目前hive不支持在一个sql中去重几个不同字段需要拆分后join;
2. 因为T是外部装载进入hive的,文件比较散乱,考虑先使用合并小文件,确保Map过程中不会因为资源不足而持续append状态;
3. 适当减少每个reduce处理的数据量,默认1G
综上,调整的参数如下:
set mapreduce.job.queuename=root.mapreduce.hourlyetl;
set mapred.min.split.size=128000000;
set mapred.min.split.size.per.node=128000000;
set mapred.min.split.size.per.rack=128000000;
set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;
set hive.exec.reducers.bytes.per.reducer=100000000;
set hive.groupby.skewindata=true;
代码调整为
select t1.a,t2.c
from
(
select count(distinct A) as a from T
)t1 join
(
select count(distinct C) as c from T
)t2
;

Job执行时间从13min缩减到5min(同一数据量下的T)


参考文章:
1.浅析hadoop中的数据倾斜:http://my.oschina.net/leejun2005/blog/100922
2.数据倾斜总结:http://www.alidata.org/archives/2109


已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [hive 优化] 推荐:

hive 优化 tips

- - CSDN博客推荐文章
一、     Hive join优化. 也可以显示声明进行map join:特别适用于小表join大表的时候,SELECT /*+ MAPJOIN(b) */ a.key, a.value FROM a join b on a.key = b.key. 2.     注意带表分区的join, 如:.

hive优化(2)

- - 开源软件 - ITeye博客
Hive是将符合SQL语法的字符串解析生成可以在Hadoop上执行的MapReduce的工具. 使用Hive尽量按照分布式计算的一些特点来设计sql,和传统关系型数据库有区别,. 所以需要去掉原有关系型数据库下开发的一些固有思维. 1:尽量尽早地过滤数据,减少每个阶段的数据量,对于分区表要加分区,同时只选择需要使用到的字段.

hive优化

- - 开源软件 - ITeye博客
hive.optimize.cp=true:列裁剪. hive.optimize.prunner:分区裁剪. hive.limit.optimize.enable=true:优化LIMIT n语句. hive.limit.optimize.limit.file=10:最大文件数.   1.job的输入数据大小必须小于参数:hive.exec.mode.local.auto.inputbytes.max(默认128MB).

Hive优化

- - 互联网 - ITeye博客
     使用Hive有一段时间了,目前发现需要进行优化的较多出现在出现join、distinct的情况下,而且一般都是reduce过程较慢.      Reduce过程比较慢的现象又可以分为两类:. 情形一:map已经达到100%,而reduce阶段一直是99%,属于数据倾斜. 情形二:使用了count(distinct)或者group by的操作,现象是reduce有进度但是进度缓慢,31%-32%-34%...一个附带的提示是使用reduce个数很可能是1.

hive优化

- - 互联网 - ITeye博客
1:尽量尽早地过滤数据,减少每个阶段的数据量,对于分区表要加分区,同时只选择需要使用到的字段. 2:尽量原子化操作,尽量避免一个SQL包含复杂逻辑. 可以使用中间表来完成复杂的逻辑. 3:单个SQL所起的JOB个数尽量控制在5个以下. 4:慎重使用mapjoin,一般行数小于2000行,大小小于1M(扩容后可以适当放大)的表才能使用,小表要注意放在join的左边(目前TCL里面很多都小表放在join的右边).

Hive优化总结

- - 淘剑笑的博客
优化时,把hive sql 当做map reduce 程序来读,会有意想不到的惊喜. 理解hadoop 的核心能力,是hive 优化的根本. 这是这一年来,项目组所有成员宝贵的经验总结. 长期观察hadoop处理数据的过程,有几个显著的特征 :. 1.不怕数据多,就怕数据倾斜. 2.对jobs数比较多的作业运行效率相对比较低,比如即使有几百行的表,如果多次关联多次汇总,产生十几个jobs,没半小时是跑不完的.

Hive Join 优化 翻译

- - 数据库 - ITeye博客
翻译自  https://cwiki.apache.org/confluence/display/Hive/LanguageManual+JoinOptimization#LanguageManualJoinOptimization-AutoConversiontoSMBMapJoin. Join Optimization ----Join 调优.

hive优化要点总结

- - CSDN博客云计算推荐文章
1、让服务器尽可能的多做事情,榨干服务器资源,以最高系统吞吐量为目标. 再好的硬件没有充分利用起来,都是白扯淡. (1)  启动一次job尽可能的多做事情,一个job能完成的事情,不要两个job来做.  通常来说前面的任务启动可以稍带一起做的事情就一起做了,以便后续的多个任务重用,与此紧密相连的是模型设计,好的模型特别重要..

Hive作业优化总结

- - 开源软件 - ITeye博客
一、Hadoop 计算框架的特性. 4、设置合理reducer个数. 5、合并MapReduce操作. 一、Hadoop 计算框架的特性. •由于数据分布不均匀,造成数据大量的集中到一点,造成数据热点. 2、Hadoop框架的特性. •不怕数据大,怕数据倾斜. •jobs数比较多的作业运行效率相对比较低,如子查询比较多.

hive查询和优化

- - 数据库 - ITeye博客
1:Local Model(本地模式):. select user,item from table limit 10;(生成mapreduce). select * from table limit 10;(不会生存mapreduce). 2:列剪裁 :hive在读数据的时候,可以只读取查询中所需要用到的列.