Hive优化总结
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hive优化总结相关的知识,希望对你有一定的参考价值。
参考技术A set hive.auto.convert.join = true; 默认为trueset 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优化总结的主要内容,如果未能解决你的问题,请参考以下文章