Hive优化总结

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hive优化总结相关的知识,希望对你有一定的参考价值。

参考技术A set hive.auto.convert.join = true; 默认为true

set hive.mapjoin.smalltable.filesize=25000000;默认25M以下是小表

(1)空key过滤:一般业务场景不常用

(2)空key转换:nvl(n.id,rand()) = o.id; 将空key转为随机值,进不同的reducer

(3)SMB:分桶 桶的个数不要超过可用CPU的核数

clustered by(id)  ---建表条件

sorted by(id)

into 6 buckets

set hive.optimize.bucketmapjoin = true;

set hive.optimize.bucketmapjoin.sortedmerge = true;

set hive.input.format=org.apache.hadoop.hive.ql.io.BucketizedHiveInputFormat;

开启Map端聚合参数设置

set hive.map.aggr = true; 开启在Map端进行聚合。默认为True

set hive.groupby.mapaggr.checkinterval = 100000; Map端进行聚合操作的条目数目

set hive.groupby.skewindata = true; 有数据倾斜的时候进行负载均衡(默认是false)

hive.strict.checks.cartesian.product

合理设置Map数目

(1)computeSliteSize(Math.max(minSize,Math.min(maxSize,blocksize)))=blocksize=128M公式,调整maxSize最大值。让maxSize最大值低于blocksize就可以增加map的个数。

(2)小文件进行合并

在map-only任务结束时合并小文件,默认true

SET hive.merge.mapfiles = true;

在map-reduce任务结束时合并小文件,默认false

SET hive.merge.mapredfiles = true;

合并文件的大小,默认256M

SET hive.merge.size.per.task = 268435456;

当输出文件的平均大小小于该值时,启动一个独立的map-reduce任务进行文件merge

SET hive.merge.smallfiles.avgsize = 16777216;

合理设置Reduce个数

(1)每个Reduce处理的数据量默认是256MB

hive.exec.reducers.bytes.per.reducer=256000000

(2)每个任务最大的reduce数,默认为1009

hive.exec.reducers.max=1009

(3)计算reducer数的公式

N=min(参数2,总输入数据量/参数1)

set hive.exec.parallel=true;//打开任务并行执行

set hive.exec.parallel.thread.number=16;  //同一个sql允许最大并行度,默认为8。

以上是关于Hive优化总结的主要内容,如果未能解决你的问题,请参考以下文章

Hive优化总结

hive&hue优化

hive优化总结

hive优化方法

hive优化总结

hive优化方式总结