在 Apache Hive 中,参数(也称为配置属性)用于控制 Hive 的行为和性能。这些参数可以优化查询性能、调整资源使用、解决数据倾斜问题等。Hive 参数通常分为以下几类:
1. 查询执行参数
这些参数用于控制查询的执行方式和性能。
1.1 MapReduce 相关参数
-
hive.exec.reducers.bytes.per.reducer
:-
默认值:256 MB(
256000000
) -
作用:每个 Reduce 任务处理的数据量。
-
示例:
SET hive.exec.reducers.bytes.per.reducer = 500000000;
(每个 Reducer 处理 500 MB 数据)
-
-
hive.exec.reducers.max
:-
默认值:1009
-
作用:设置最大的 Reduce 任务数。
-
示例:
SET hive.exec.reducers.max = 2000;
-
-
hive.exec.parallel
:-
默认值:
false
-
作用:是否启用并行执行。
-
示例:
SET hive.exec.parallel = true;
-
-
hive.exec.dynamic.partition
:-
默认值:
false
-
作用:是否启用动态分区。
-
示例:
SET hive.exec.dynamic.partition = true;
-
-
hive.exec.dynamic.partition.mode
:-
默认值:
strict
-
作用:动态分区模式,
strict
表示必须指定至少一个静态分区,nonstrict
表示可以完全动态分区。 -
示例:
SET hive.exec.dynamic.partition.mode = nonstrict;
-
1.2 聚合和倾斜优化参数
-
hive.map.aggr
:-
默认值:
true
-
作用:是否在 Map 阶段进行聚合。
-
示例:
SET hive.map.aggr = true;
-
-
hive.groupby.skewindata
:-
默认值:
false
-
作用:是否启用数据倾斜优化。
-
示例:
SET hive.groupby.skewindata = true;
-
-
hive.optimize.skewjoin
:-
默认值:
false
-
作用:是否启用 Skew Join 优化。
-
示例:
SET hive.optimize.skewjoin = true;
-
1.3 Join 优化参数
-
hive.auto.convert.join
:-
默认值:
true
-
作用:是否自动将小表转换为 Map Join。
-
示例:
SET hive.auto.convert.join = true;
-
-
hive.mapjoin.smalltable.filesize
:-
默认值:25 MB(
25000000
) -
作用:小表的大小阈值,超过该值则不转换为 Map Join。
-
示例:
SET hive.mapjoin.smalltable.filesize = 50000000;
(50 MB)
-
2. 资源管理参数
这些参数用于控制 Hive 任务的资源分配。
2.1 内存相关参数
-
hive.auto.convert.join.noconditionaltask.size
:-
默认值:10 MB(
10000000
) -
作用:Map Join 中小表的大小阈值。
-
示例:
SET hive.auto.convert.join.noconditionaltask.size = 20000000;
(20 MB)
-
-
hive.tez.container.size
:-
默认值:-1(未设置)
-
作用:设置 Tez 容器的内存大小。
-
示例:
SET hive.tez.container.size = 4096;
(4 GB)
-
2.2 并行度和任务数
-
hive.exec.parallel.thread.number
:-
默认值:8
-
作用:并行执行的线程数。
-
示例:
SET hive.exec.parallel.thread.number = 16;
-
-
hive.tez.grouping.max-size
:-
默认值:1 GB(
1073741824
) -
作用:Tez 任务的最大分组大小。
-
示例:
SET hive.tez.grouping.max-size = 2147483648;
(2 GB)
-
3. 数据存储和压缩参数
这些参数用于控制数据的存储格式和压缩方式。
3.1 存储格式
-
hive.default.fileformat
:-
默认值:
TextFile
-
作用:设置默认的文件存储格式。
-
示例:
SET hive.default.fileformat = ORC;
-
-
hive.exec.compress.output
:-
默认值:
false
-
作用:是否压缩输出数据。
-
示例:
SET hive.exec.compress.output = true;
-
3.2 压缩参数
-
hive.exec.compress.intermediate
:-
默认值:
false
-
作用:是否压缩中间数据。
-
示例:
SET hive.exec.compress.intermediate = true;
-
-
mapreduce.map.output.compress.codec
:
4. 日志和调试参数
这些参数用于控制日志输出和调试信息。
4.1 日志级别
4.2 调试参数
5. 其他常用参数
-
hive.fetch.task.conversion
:-
默认值:
minimal
-
作用:控制是否将简单查询转换为 Fetch 任务。
-
示例:
SET hive.fetch.task.conversion = more;
-
-
hive.execution.engine
:-
默认值:
mr
(MapReduce) -
作用:设置 Hive 的执行引擎。
-
示例:
SET hive.execution.engine = tez;
-
总结
Hive 提供了丰富的参数来优化查询性能、管理资源和调试任务。常用的参数包括:
-
查询执行参数:如
hive.exec.reducers.bytes.per.reducer
、hive.groupby.skewindata
。 -
资源管理参数:如
hive.tez.container.size
、hive.exec.parallel.thread.number
。 -
存储和压缩参数:如
hive.default.fileformat
、hive.exec.compress.output
。
根据具体场景合理配置这些参数,可以显著提升 Hive 的性能和效率。