hive 多个方面的优化

一、hive表优化

分区:

静态分区

动态分区

set hive.exec.dynamic.partition=true;

set hive.exec.dynamic.partition.mode=nonstrict;

分桶:

set hive.enforce.bucketing=true;

set hive.enforce.sorting=true;

二、hive sql优化

1.join优化

  set hive.optimize.skewjoin=true;

  set hive.skewjoinkey=100000; --这个是join键对应的条数超过这个值则会进行优化(多一个job)

 mapjoin:

    set hive.auto.convert.join=true;

   hive.mapjoin.smalltable.filesize默认值是25mb

2.groupby优化

hive.groupby.skewindata=true; --goupby过程出现倾斜,设为true

set hive.groupby.mapaggr,checkinterval=100000; --groupby 键记录条数超过100000则进行优 化(多一个job)

3.count distinct优化

select count(1) from (selecy distinct id from a) temp;

select count(1) from (select id from a group by id) tmp;

4.针对多个count,优化(union all)

三、hive job优化

1.并行化执行

set hive.exec.parallel=true;

set hive.exec.parallel.thread.number=8; --设置并行数最大8个

2.本地化执行

set hive.exec.mode.local.auto=true;

本地化执行的条件是:

1> jobde 输入数据大小必须小于参数:

hive.exec.mode.local.auto.inputbytes.max(默认128MB)

2> job的map数必须小于参数:

hive.exec.mode.local.auto.tasks.max(默认4)

3> job的reduce数必须为0或者1

3.job合并

job合并输入小文件

set hive.input.format=

org.apache.hadoop.hive.ql.io.CombineHiveInputFormat

合并文件数由mapred.max.split.size限制的大小决定

job合并输出小文件

set hive.merge.smallfiles.avgsize=256000000;--当输出文件平均大小小于256m,启动新job合并文件

set hive.merge.size.per.task=64000000;--合并之后的文件大小

4.JVM重利用

set mapred.job.reuse.jvm.num.tasks=20;

5.压缩数据

中间压缩,处理hive查询的多个job之间的数据

set hive.exec.compress.intermediate=true;

set hive.intermediate.compression.code=org.apache.hadoop.io.compress.SnappyCodec;

set hive.intermediate.compression.type=BLOCK;

hive最终的输出压缩

set hive.exec.compress.output=true;

set mapred.output.compression.code=org.apache.hadoop.io.compress.GzipCodec;

set mapred.output.compression.type=BLOCK;

四、hive map 优化

map个数计算:

compute_map_num= min(split_num,max(default_num,goal_num))

其中default_num=total_size/block_size

goal_num=mapred.map.tasks

split_size=max(mapred.min.split.size,block_size)

split_num=total_size/split_size

map端聚合(相当reudce)

set hive.map.aggr=true;

推测执行

mapred.map.tasks.speculative.execution

五、hive reduce优化

set mapred.reduce.tasks=10;

reduce个数计算:

numRtasks=min[maxReducers,input.size/perReducer]

其中maxReducers=hive.exec.reducers.max 默认:999

perReducer=hive.exec.reducers.bytes.per.reducer 默认:1G

推测执行

mapred.reduce.tasks.speculative.execution

hive.mapred.reduce.tasks.speculative.execution

猜你喜欢

转载自blog.csdn.net/huo386680070/article/details/89154217
今日推荐