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
  • 默认值:在0.7.0到0.10.0中; 在 0.11.0 及更高版本中 (HIVE-3297false``true)
  • 新增:0.7.0,带 HIVE-1642

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-1642hive.smalltable.filesize(在 Hive 0.8.1 中替换为 hive.mapjoin.smalltable.filesize
  • 新增:Hive 0.8.1 with HIVE-2499hive.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
posted @   chief_y  阅读(656)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
点击右上角即可分享
微信分享提示