Hive 常用配置项

668 阅读2分钟

辅助信息

显示字段名称 set hive.cli.print.header=true;

显示当前数据库名称 set hive.cli.print.current.db=true;

查看 Hive 数据文件存储位置 set hive.metastore.warehouse.dir;

开启中间数据压缩

set hive.exec.compress.intermediate=true;,默认为 false

开启最终结果压缩

set hive.exec.compress.output=true;,默认为 false

开启最终结果压缩后,需要设置一个编解码器

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

设置压缩方式

set mapred.output.compression.type=BLOCK,包含三个值:NONE、RECORD、BLOCK,默认为 RECORD

map-side join

0.7版本后废除了 /*+ MAPJOIN(tableName)*/ 这样的标记,需要设置一下配置,让Hive 在必要时启动这项优化

set hive.auto.convert.join=true 开启 Map 端 join,默认为 false

set hive.mapjoin.smalltable.filesize=25000000 设置能够使用这项优化的小表的大小

动态分区相关

参数默认值说明
hive.exec.dynamic.partitionfalse开启 Hive 动态分区
hive.exec.dynamic.partition.modestrictstrict 模式下,至少有一列是静态分区;nostrict 模式下允许所有列为动态分区
hive.exec.max.dynamic.partitions.pernode100设置每个 Mapper 和 Reducer 可以创建的最大分区个数。如果超出,将发生错误
hive.exec.max.dynamic.partitions1000一个动态分区语句可以创建的最大分区个数
hive.exec.max.created.files100000全局可以创建的最大文件个数

开启自动本地模式

set hive.exec.mode.local.auto=true; 该配置,Hive 会在恰当的时候自动启用本地模式

以下方式临时启用本地模式

set oldjobtracker=${hiveconf:mapred.job.tracker};

set mapred.job.tracker=local;

set mapred.tmp.dir=/dir;

# 执行查询

# 恢复
set mapred.job.tracker=${oldhobtracker};

开启 map 端 combiner

set hive.map.aggr=true;

设置 mapper 和 reducer 个数的相关参数

与 mapper 个数相关参数

参数默认值说明
mapred.max.split.size100000000设置split size,默认为 100 M
mapred.min.split.size.per.node100000000
mapred.min.split.size.per.rack100000000
hive.input.formatorg.apache.hadoop.hive.ql.io.CombineHiveInputFormat 表示执行前进行小文件合并

Hive 按照输入量的大小确定 reducer 个数的,可以使用一下参数进行修改

参数默认值说明
hive.exec.reducers.bytes.per.reducer1G设置每个reducer处理的数据量大小,Hive 会根据数据量的大小自动计算出需要 reducer 个数
hive.exec.reducers.max999设置允许的最大 reducer 个数,避免某个查询消耗太多的 reducer 资源
mapred.reduce.tasks-1设定一个固定的 reducer 数量值

设置 JVM 重用

Hadoop 默认配置是使用派生 JVM 执行 map 和 reduce 执行任务。JVM 的启动开销会很大,所以重用 JVM 可以使同一个 job 重复使用一个 JVM 实例多次,这个值可做如下配置。

Hadoop 配置文件 mapred-site.xml 中配置:

<property>
    <name>mapred.job.reuse.jvm.num.tasks</name>
    <value>10</value>
</property>

输出合并小文件常用参数

set hive.merge.mapfiles = true; -- 默认 true,在 map-only 任务结束时合并小文件
set hive.merge.mapredfiles = true; -- 默认 false,在 map-reduce 任务结束时合并小文件
set hive.merge.size.per.task = 268435456; -- 默认 256M
set hive.merge.smallfiles.avgsize = 16777216; -- 当输出文件的平均大小小于 16m 该值时,启动一个独立的 map-reduce 任务进行文件 merge