Hive 常用参数,持续更新TODO

207 阅读4分钟

hive.mapred.supports.subdirectories:运行的Hadoop版本是否支持表/分区的子目录。

- Hive 0.10.0defaultfalse

加快执行速度

  1. hive.exec.mode.local.auto:自动转本地执行 <flse>

    • Default Value: false
    • Added In: Hive 0.7.0 with HIVE-1408
  2. hive.exec.mode.local.auto.inputbytes.max:自动转本地执行的最大输入数据量<128M>

    • Default Value: 134217728
    • Added In: Hive 0.7.0 with HIVE-1408
  3. hive.exec.mode.local.auto.input.files.max:自动转本地执行允许最大输入文件数。<4>

    • Default Value: 4
    • Added In: Hive 0.9.0 with HIVE-2651
  4. hive.exec.parallel:是否并发执行job。<fasle>

    • Hive 0.5.0
    • Default: false
  5. hive.exec.parallel.thread.number:job并行度。<8>

    • Hive 0.6.0,Default: 8
  6. hive.mapred.mode:严格模式。Hive 0.3.0,Default: <strict>

    • Hive 0.x: nonstrict
    • Hive 1.x: nonstrict
    • Hive 2.x: strict ([HIVE-12413]
  7. hive.mapred.reduce.tasks.speculative.execution:是否开启推测执行。<true>

    • Default Value: true
    • Added In: Hive 0.5.0
  8. mapred.job.reuse.jvm.num.tasks:JVM复用。<1>

    • mapred.job.reuse.jvm.num.tasks=10
    • 即配置JVM示例在同一个job中复用10次,优点是可以减少JVM启动过程中的时间资源开销,缺点是,如果该作业出现数据清晰,导致某个task一直跑不完的话,那么JVM将会一直占用task插槽数(插槽数即task资源数)使得资源浪费。

hive压缩

  1. hive.exec.compress.intermediate:是否开启Mapper--Reducer中间压缩。<false>

    • Default Value: false
    • Added In: Hive 0.2.0
    • 压缩code以及其他压缩控制参数有hadoop conf控制:mapred.output.compress*
  2. 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
  3. mapred.output.compression.codec:reduce端输出压缩编码Code。<org.apache.hadoop.io.compress.DefaultCodec>

  4. hive.exec.compress.output:是否开启输出结果压缩。<false>

    • Default Value: false
    • Added In: Hive 0.2.0
    • 压缩code以及其他压缩控制参数有hadoop conf控制:mapred.output.compress*

优化数据倾斜

group by 优化

  1. hive.multigroupby.singlereducer:多个multi-group-by查询具有公共的group-by键,优化成单个M/R作业。<true>
    • Default Value: true
    • Added In: Hive 0.9.0 with HIVE-2621
  2. hive.groupby.skewindata:优化group by产生的数据倾斜,将一个作业拆成两个作业,打散-聚合。<false>
    • Default Value: false
    • Added In: Hive 0.3.0
  3. hive.map.aggr:是否开启group by查询中的map端预聚合。<true>
    • Default Value: true in Hive 0.3 and later; false in Hive 0.2

    • Added In: Hive 0.2.0

reduce join 转 map join

  1. hive.auto.convert.join:是否自动转map join。<true>

    • Default Value: false in 0.7.0 to 0.10.0; true in 0.11.0 and later (HIVE-3297)  
    • Added In: 0.7.0 with HIVE-1642
  2. hive.smalltable.filesize:自动转map join时的小表大小。<25000000 => 23.8M>

    • Default Value: 25000000
    • Added In: Hive 0.7.0 with HIVE-1642hive.smalltable.filesize (replaced by hive.mapjoin.smalltable.filesize in Hive 0.8.1)
    • Added In: Hive 0.8.1 with HIVE-2499hive.mapjoin.smalltable.filesize
  3. hive.auto.convert.join.noconditionaltask:是否将多个mapjoin合并为一个。<true>

    • Default Value: true
    • Added In: 0.11.0 with HIVE-3784 (default changed to true with HIVE-4146)
  4. hive.auto.convert.join.noconditionaltask.size : 如果开启mapjoin合并,那么多个mapjoin转换为1个时,允许所有小表的文件大小总和的最大值。<10000000 -> 9.5M>

    • Default Value: 10000000
    • Added In: 0.11.0 with HIVE-3784
参数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数量

  1. mapred.reduce.tasks:指定每个Job的Reducer数量。<-1>

    • Default Value: -1
    • Added In: Hive 0.1.0
  2. hive.exec.reducers.bytes.per.reducer:每个Reducer处理的字节数。<256 MB>

    • Default Value: 1,000,000,000 prior to Hive 0.14.0; 256 MB (256,000,000) in Hive 0.14.0 and later
    • Added In: Hive 0.2.0; default changed in 0.14.0 with HIVE-7158 (and HIVE-7917)
  3. hive.exec.reducers.max:最大允许启动的Reducer数。<1009>

    • Default Value: 999 prior to Hive 0.14.0; 1009 in Hive 0.14.0 and later
    • Added In: Hive 0.2.0; default changed in 0.14.0 with HIVE-7158 (and HIVE-7917)
参数8910说明:
最方便的调节方式就是通过参数8直接指定Reducer数量。根据输出小文件的接受程度反馈调节。
如果参数8设置为-1<默认值>,那么Job将自动确定Reducer数,Reducer数最大值由参数10控制。

工具参数

  1. hive.exec.dynamic.partition.mode:是否开启动态分区。<strict>

    • Hive 0.6.0:Default Value: strict
    • strict:至少有一个静态分区
    • nonstrict:允许全部分区为动态分区
  2. hive.exec.max.dynamic.partitions: 允许创建最大动态分区数。<1000>

    • Hive 0.6.0, Default Value: 1000
  3. hive.exec.max.dynamic.partitions.pernode:每个mapper/reduce 节点允许创建的最大动态分区数。

    • Default Value: 100
    • Added In: Hive 0.6.0
  4. hive.cli.print.header:显示表名。<false>

    • Default Value: false
    • Added In: Hive 0.7.0
  5. hive.cli.print.current.db: 显示库名。<false>

    • Default Value: false
    • Added In: Hive 0.8.1
  6. hive.fetch.task.conversion:是否走MR Job。<more>

    • Default Value: minimal in Hive 0.10.0 through 0.13.1, more in Hive 0.14.0 and later
    • Added In: Hive 0.10.0 with HIVE-2925; default changed in Hive 0.14.0 with HIVE-7397
参数说明:
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