您的位置:首页 > 其它

hive之优化策略

2020-08-21 11:49 155 查看

hive优化

1.hive.fetch.task.conversion
none minal more(最高级别)
set hive.fetch.task.conversion=more;
2.本地模式
set hive.exec.mode.local.auto=true;

3.join
开启自动选择Mapjoin
set hive.auto.convert.join=true;
大小表阀值
set hive.mapjoin.smaltable.filesize=25000000;

4.开启map端集合参数设置
是否在map端进行聚合,默认false
set hive.map.aggr=true

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

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

5.count(distinct col)去重
数据倾斜
由于key的分布不均衡,造成数据往一个方向偏移的现象
本身的数据倾斜
1.join 语句
2.count(distinct col)
3.GROUOP BY

6.笛卡尔积
尽量避免笛卡尔积,join时不加on条件,或者无效的on条件

7.动态分区调整
1.开启动态分区参数设置

set hive.exec.dynamic.partition=true;

2.设置为非严格模式

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

3.在所有mr的节点上,最大一共可以创建多少个动态分区。默认1000

set hive.exec.dynamic.partitions=1000;

4.每一个执行mr的节点上,最大可创建多少个动态分区

set  hive.exec.max.dynamic.partitions.pernode=100;

5.整个mr job中,最大可以创建多少个hdfs文件。默认1000

set hive.exec.max.created.files=100000;

create table if not exists table_name(
col1 int,
col2 string
)PARTITIONED BY (lt string)
row format delimited
fields terminated by ","
;

insert  into   table_name dy_part partition(lt)
select t1,t2,t3 from test;(t3插入lt进行分区)

8.分桶

9.合理设置map、reduce个数
mapred.max.split.size=25600000000
mapred.max.split.size.per.node=2
mapred.max.split.size.per.rack=2
hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputformat

手动设置
set mapred.map.tasks=2
set mapred.reduce.tasks=2

set hive.exec.reducers.max=1009
10.并行执行
//打开并行执行
set hive.exec.parallel =true;
//同一个sql语句允许的最大并行度,默认8
set hive.exec.parallel.thread.number=16;

11.严格模式
set hive.mapred.mode=strict;

12.jvm重用
mapreduce.job.jvm.numtasks=10
mapred.job.reuse.jvm.num.tasks=10

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: