辅助信息
显示字段名称 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.partition | false | 开启 Hive 动态分区 |
hive.exec.dynamic.partition.mode | strict | strict 模式下,至少有一列是静态分区;nostrict 模式下允许所有列为动态分区 |
hive.exec.max.dynamic.partitions.pernode | 100 | 设置每个 Mapper 和 Reducer 可以创建的最大分区个数。如果超出,将发生错误 |
hive.exec.max.dynamic.partitions | 1000 | 一个动态分区语句可以创建的最大分区个数 |
hive.exec.max.created.files | 100000 | 全局可以创建的最大文件个数 |
开启自动本地模式
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.size | 100000000 | 设置split size,默认为 100 M |
mapred.min.split.size.per.node | 100000000 | |
mapred.min.split.size.per.rack | 100000000 | |
hive.input.format | org.apache.hadoop.hive.ql.io.CombineHiveInputFormat 表示执行前进行小文件合并 |
Hive 按照输入量的大小确定 reducer 个数的,可以使用一下参数进行修改
| 参数 | 默认值 | 说明 |
|---|---|---|
hive.exec.reducers.bytes.per.reducer | 1G | 设置每个reducer处理的数据量大小,Hive 会根据数据量的大小自动计算出需要 reducer 个数 |
hive.exec.reducers.max | 999 | 设置允许的最大 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