HIVE参数大全
查询和 DDL 执行
reduce端优化
计算reduce数的公式:
N=min(参数2,总输入数据量/参数1),
即默认一个reduce处理1G数据量
set mapred.reduce.tasks=10
mapred.reduce.tasks
- 默认值:
-1
- 添加于:Hive 0.1.0
每个作业的默认减少任务数。通常设置为接近可用主机数量的素数。当 mapred.job.tracker 为“本地”时忽略。Hadoop 默认将此设置为 1,而 Hive 使用 -1 作为其默认值。通过将此属性设置为 -1,Hive 将自动计算出减速器的数量。
hive.exec.reducers.bytes.per.reducer
- 默认值:
1,000,000,000
在 Hive 0.14.0 之前;Hive 0.14.0 及更高版本中为256 MB ( )256,000,000
- 添加于:Hive 0.2.0;默认在 0.14.0 中更改为 HIVE-7158 (和 HIVE-7917)
每个减速器的尺寸。Hive 0.14.0 及更早版本中的默认值为 1 GB,也就是说,如果输入大小为 10 GB,则将使用 10 个 reducer。在 Hive 0.14.0 及更高版本中,默认值为 256 MB,也就是说,如果输入大小为 1 GB,则将使用 4 个 reducer。
hive.exec.reducers.max
- 默认值:
999
在 Hive 0.14.0 之前;1009
在 Hive 0.14.0 及更高版本中`` - 添加于:Hive 0.2.0;默认在 0.14.0 中更改为HIVE-7158(和HIVE-7917)
将使用的最大减速器数量。如果配置属性mapred.reduce.tasks中指定的一个为负数,Hive 将在自动确定 reducer 数量时将此作为最大 reducer 数量。
map端优化
hive.map.aggr
- 默认值:
true
在 Hive 0.3 及更高版本中;false
在 Hive 0.2 中 - 添加于:Hive 0.2.0
是否在 Hive Group By 查询中使用map端聚合。
hive.auto.convert.join
Hive 是否启用有关根据输入文件大小将公共联接转换为 mapjoin 的优化。(请注意,hive-default.xml.template 在 Hive 0.11.0 到 0.13.1 中错误地将默认值指定为 false。
hive.smalltable.filesize or hive.mapjoin.smalltable.filesize
- 默认值:
25000000
- 已添加:Hive 0.7.0 与 HIVE-1642:hive.smalltable.filesize(在 Hive 0.8.1 中替换为 hive.mapjoin.smalltable.filesize)
- 新增:Hive 0.8.1 with HIVE-2499:hive.mapjoin.smalltable.filesize
小表的输入文件大小的阈值(以字节为单位);如果文件大小小于此阈值,它将尝试将公共连接转换为mapjoin。
groupby优化
hive.groupby.skewindata
- 默认值:
false
- 添加于:Hive 0.3.0
数据中是否存在偏斜以优化分组查询。
hive.groupby.mapaggr.checkinterval
- 默认值:
100000
- 添加于:Hive 0.3.0
在执行分组键/聚合类的大小之后的行数。
limit限制调整
hive.limit.row.max.size
- 默认值:
100000
- 添加于:Hive 0.8.0
当为简单的 LIMIT 尝试较小的数据子集时,我们需要保证每行至少具有多少大小。
hive.limit.optimize.limit.file
- 默认值:
10
- 添加于:Hive 0.8.0
当为简单的 LIMIT 尝试较小的数据子集时,我们可以采样的最大文件数。
hive.limit.optimize.enable
- 默认值:
false
- 添加于:Hive 0.8.0
是否启用优化以首先尝试使用较小的数据子集进行简单 LIMIT。
hive.limit.optimize.fetch.max
- 默认值:
50000
- 添加于:Hive 0.8.0
简单 LIMIT 的较小数据子集允许的最大行数(如果它是获取查询)。插入查询不受此限制。
并行执行
hive.exec.parallel
- 默认值:
false
- 添加于:Hive 0.5.0
是否并行执行作业。适用于可以并行运行的 MapReduce 作业,例如在连接之前处理不同源表的作业。 从Hive 0.14开始,也适用于可以并行运行的移动任务,例如在多插入期间移动文件以插入目标。
hive.exec.parallel.thread.number
- 默认值:
8
- 添加于:Hive 0.6.0
最多可以并行执行多少个作业。
倾斜连接优化
hive.optimize.skewjoin
- 默认值:
false
- 添加于:Hive 0.6.0
是否启用倾斜连接优化。
hive.skewjoin.mapjoin.map.tasks
- 默认值:
10000
- 添加于:Hive 0.6.0
确定用于倾斜连接的后续map连接作业中的map任务数量。它应该与hive.skewjoin.mapjoin.min.split一起使用以执行细粒度控制。
小文件优化
hive.merge.mapfiles
- 默认值:
true
- 新增: Hive 0.4.0
在仅映射作业结束时合并小文件。
hive.merge.mapredfiles
- 默认值:
false
- 新增: Hive 0.4.0
在映射减少作业结束时合并小文件。
hive.merge.size.per.task
- 默认值:
256000000
- 新增: Hive 0.4.0
作业结束时合并文件的大小。
hive.merge.smallfiles.avgsize
- 默认值:
16000000
- 新增: Hive 0.5.0
当作业的平均输出文件大小小于此数字时,Hive 将启动其他 map-reduce 作业,以将输出文件合并到更大的文件中。仅当 hive.merge.mapfiles 为真时,才会对仅映射作业执行此操作;如果 hive.merge.mapredfiles 为真,则仅对 map-reduce 作业执行此操作。
1、执行map前进行小文件合并
需要更改Hive的输入文件格式,即参数hive.input.format,默认值是org.apache.hadoop.hive.ql.io.HiveInputFormat,我们改成
set hive.input.format = org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;
2、每个map最大输入大小,决定合并后的文件数
set mapred.max.split.size=256000000;
3、一个节点上split的至少的大小,决定多个data node 上的文件是否需要合并
set mapred.min.split.size.per.node=100000000;
4、一个交换机下split的至少的大小,决定多个交换机上的文件是否合并
set mapred.min.split.size.per.rack=100000000;
shuffle过程优化
开启压缩中间结果
- set mapred.compress.map.output=true;
设置中间压缩算法
- set mapred.compress.output.compresssion.codec=com.hadoop.compression.lzo.LzoCodec
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App