hive.mapred.supports.subdirectories:运行的Hadoop版本是否支持表/分区的子目录。
- Hive 0.10.0,default:false
加快执行速度
-
hive.exec.mode.local.auto:自动转本地执行<flse>- Default Value:
false - Added In: Hive 0.7.0 with HIVE-1408
- Default Value:
-
hive.exec.mode.local.auto.inputbytes.max:自动转本地执行的最大输入数据量<128M>- Default Value:
134217728 - Added In: Hive 0.7.0 with HIVE-1408
- Default Value:
-
hive.exec.mode.local.auto.input.files.max:自动转本地执行允许最大输入文件数。<4>- Default Value:
4 - Added In: Hive 0.9.0 with HIVE-2651
- Default Value:
-
hive.exec.parallel:是否并发执行job。<fasle>- Hive 0.5.0
- Default: false
-
hive.exec.parallel.thread.number:job并行度。<8>- Hive 0.6.0,Default: 8
-
hive.mapred.mode:严格模式。Hive 0.3.0,Default:<strict>- Hive 0.x:
nonstrict - Hive 1.x:
nonstrict - Hive 2.x:
strict([HIVE-12413]
- Hive 0.x:
-
hive.mapred.reduce.tasks.speculative.execution:是否开启推测执行。<true>- Default Value:
true - Added In: Hive 0.5.0
- Default Value:
-
mapred.job.reuse.jvm.num.tasks:JVM复用。<1>- mapred.job.reuse.jvm.num.tasks=10
- 即配置JVM示例在同一个job中复用10次,优点是可以减少JVM启动过程中的时间资源开销,缺点是,如果该作业出现数据清晰,导致某个task一直跑不完的话,那么JVM将会一直占用task插槽数(插槽数即task资源数)使得资源浪费。
hive压缩
-
hive.exec.compress.intermediate:是否开启Mapper--Reducer中间压缩。<false>- Default Value:
false - Added In: Hive 0.2.0
- 压缩code以及其他压缩控制参数有hadoop conf控制:mapred.output.compress*
- Default Value:
-
mapred.map.output.compression.codec:map端输出压缩编码Code。<org.apache.hadoop.io.compress.DefaultCodec>- 默认:org.apache.hadoop.io.compress.DefaultCodec
- 可选:com.hadoop.compression.lzo.LzoCodec
- 可选:org.apache.hadoop.io.compress.GzipCodec
- 可选:org.apache.hadoop.io.compress.BZip2Codec
- 可选:com.hadoop.compression.lzo.LzopCodec
- 可选:org.apache.hadoop.io.compress.Lz4Codec
- 可选:org.apache.hadoop.io.compress.SnappyCode
-
mapred.output.compression.codec:reduce端输出压缩编码Code。<org.apache.hadoop.io.compress.DefaultCodec> -
hive.exec.compress.output:是否开启输出结果压缩。<false>- Default Value:
false - Added In: Hive 0.2.0
- 压缩code以及其他压缩控制参数有hadoop conf控制:mapred.output.compress*
- Default Value:
优化数据倾斜
group by 优化
hive.multigroupby.singlereducer:多个multi-group-by查询具有公共的group-by键,优化成单个M/R作业。<true>- Default Value:
true - Added In: Hive 0.9.0 with HIVE-2621
- Default Value:
hive.groupby.skewindata:优化group by产生的数据倾斜,将一个作业拆成两个作业,打散-聚合。<false>- Default Value:
false - Added In: Hive 0.3.0
- Default Value:
hive.map.aggr:是否开启group by查询中的map端预聚合。<true>-
Default Value:
truein Hive 0.3 and later;falsein Hive 0.2 -
Added In: Hive 0.2.0
-
reduce join 转 map join
-
hive.auto.convert.join:是否自动转map join。<true> -
hive.smalltable.filesize:自动转map join时的小表大小。<25000000 => 23.8M> -
hive.auto.convert.join.noconditionaltask:是否将多个mapjoin合并为一个。<true> -
hive.auto.convert.join.noconditionaltask.size: 如果开启mapjoin合并,那么多个mapjoin转换为1个时,允许所有小表的文件大小总和的最大值。<10000000 -> 9.5M>- Default Value:
10000000 - Added In: 0.11.0 with HIVE-3784
- Default Value:
参数6-7说明:
例如,一个大表顺序关联3个小表a(10M), b(8M),c(12M),如果hive.auto.convert.join.noconditionaltask.size的值:
1. 小于18M,则无法合并mapjoin,必须执行3个mapjoin;
2. 大于18M小于30M,则可以合并a和b表的mapjoin,所以只需要执行2个mapjoin;
3. 大于30M,则可以将3个mapjoin都合并为1个。
Mapper_Reducer数量
-
mapred.reduce.tasks:指定每个Job的Reducer数量。<-1>- Default Value:
-1 - Added In: Hive 0.1.0
- Default Value:
-
hive.exec.reducers.bytes.per.reducer:每个Reducer处理的字节数。<256 MB> -
hive.exec.reducers.max:最大允许启动的Reducer数。<1009>
参数8、9、10说明:
最方便的调节方式就是通过参数8直接指定Reducer数量。根据输出小文件的接受程度反馈调节。
如果参数8设置为-1<默认值>,那么Job将自动确定Reducer数,Reducer数最大值由参数10控制。
工具参数
-
hive.exec.dynamic.partition.mode:是否开启动态分区。<strict>- Hive 0.6.0:Default Value:
strict - strict:至少有一个静态分区
- nonstrict:允许全部分区为动态分区
- Hive 0.6.0:Default Value:
-
hive.exec.max.dynamic.partitions: 允许创建最大动态分区数。<1000>- Hive 0.6.0, Default Value:
1000
- Hive 0.6.0, Default Value:
-
hive.exec.max.dynamic.partitions.pernode:每个mapper/reduce 节点允许创建的最大动态分区数。- Default Value:
100 - Added In: Hive 0.6.0
- Default Value:
-
hive.cli.print.header:显示表名。<false>- Default Value:
false - Added In: Hive 0.7.0
- Default Value:
-
hive.cli.print.current.db: 显示库名。<false>- Default Value:
false - Added In: Hive 0.8.1
- Default Value:
-
hive.fetch.task.conversion:是否走MR Job。<more>
参数说明:
0. `none`: 禁用,所有查询均走MR Job
1. `minimal`: SELECT *, FILTER on partition columns (WHERE and HAVING clauses), LIMIT only。如上操作不走MR Job
2. `more`: SELECT, FILTER, LIMIT only (including TABLESAMPLE, virtual columns)。如上操作不走MR Job
参数建议:more