hive的调优

1、limit的限制:
hive.limit.optimize.enable=false; 建议设置true
hive.limit.row.max.size=100000;
hive.limit.optimize.limit.file=10;
hive.limit.optimize.fetch.max=50000;

2、join设置:
永远是小表驱动大表
大表标识(/+STREAMTABLE(bt)/)
开启map端的join
…convert…
…smalltable.filesize
join的on只支持等值连接

3、本地模式
hive查询数据任然还是依靠hadoop,hadoop又有单机、分布式、HA的方式。在单个jvm中运行
hive.exec.mode.local.auto=false; 建议开启
hive.exec.mode.local.auto.inputbytes.max=134217728;
hive.exec.mode.local.auto.input.files.max=4;

4、并行运行
hive没有相互依赖的任务可以并行执行。
hive.exec.parallel=false; 建议开启
hive.exec.parallel.thread.number=8;

5、strict严格模式:
严格模式hive将会阻止5类查询。

6、调整mapper或者reducer的个数:
set mapred.max.split.size=256000000; 256M
set dfs.block.size=;
hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat; //小文件多,设置该属性可以合并

reduce的个数的设置:
直接手动设置。
set hive.exec.reducers.bytes.per.reducer=256000000;
set hive.exec.reducers.max=1009;
set mapreduce.job.reduces=-1;

set mapred.reduce.tasks=;
hive.exec.reducers.max=1009;

7、JVM的重用:
set mapreduce.job.jvm.numtasks=1;
set mapred.job.reuse.jvm.num.tasks=1;

8、数据倾斜
由于key的分布不均匀造成的数据向一个方向偏的现象。
卡在某个stage一直不运行。
数据倾斜原因:
数据本身倾斜
hql语句:
join 容易造成
group by也容易造成

怎么解决倾斜:
找到造成倾斜的原因,找到造成的倾斜的key,
可以单独将这个key提取出来计算,然后再通过union合并进来;
可以将key拼接随机数,然后将其分散到不同的节点执行。
设置属性:
hive.map.aggr=true;
hive.optimize.skewjoin=false; 建议开启
hive.groupby.skewindata=false;

9、job数量:
一般是一个查询、子查询、limit、连接等、order by等产生一个job。可以通过语句来控制job

10、多个mr中group by放到单个reducer中:
hive.multigroupby.singlereducer=true;

11、创建分区:

猜你喜欢

转载自blog.csdn.net/sofun2018/article/details/83119479