Hive参数设置优化

2019-08-01 15:36:37 来源: 晴天小雨 0

摘要:自从将引擎换成Tez之后,每次执行Hive相关的查询,便会无限制的占用集群的资源,直到所有资源都被抢夺过来,导致集群其他任务无资源可用,甚是头疼,于是便有了这篇Hive相关参数的探索。

参数设置方式

配置文件 (全局有效)

用户自定义配置文件:$HIVE_CONF_DIR/hive-site.xml

默认配置文件:$HIVE_CONF_DIR/hive-default.xml

用户自定义配置会覆盖默认配置。

另外,Hive 也会读入 Hadoop 的配置,因为 Hive 是作为 Hadoop 的客户端启动的,Hive 的配置会覆盖 Hadoop 的配置。

配置文件的设定对本机启动的所有 Hive 进程都有效。

命令行参数 (对 hive 启动实例有效)

启动 Hive(客户端或 Server 方式)时,可以在命令行添加-hiveconf 来设定参数

 例如:bin/hive -hiveconf hive.root.logger=INFO,console

设定对本次启动的 Session(对于 Server 方式启动,则是所有请求的 Sessions)有效

参数声明 (对 hive 的连接 session 有效)

可以在 HQL 中使用 SET 关键字设定参数,这一设定的作用域也是 session 级的。

比如:

  set hive.exec.reducers.bytes.per.reducer=<number> 每个 reduce task 的平均负载数据量

  set hive.exec.reducers.max=<number> 设置 reduce task 数量的上限

  set mapreduce.job.reduces=<number> 指定固定的 reduce task 数量

设置并行执行

set mapred.job.priority=VERY_HIGH;

set hive.exec.parallel=true;

Container内存相关

map内存大小

参数:mapreduce.map.memory.mb

默认:4096MB

说明:mapreduce.map.memory.mb控制每个map任务的内存大小,默认值为4G,对于当前任务是内存密集型任务(如ORC文件读取/写入、全局排序)的场景,建议增大内存值,但不能超过yarn.scheduler.maximum-allocation-mb的值。

reduce内存大小

参数:mapreduce.reduce.memory.mb

默认:4096MB

说明:mapreduce.reduce.memory.mb控制每个reduce任务的内存大小,默认值为4G,对于当前任务是内存密集型任务(如ORC文件读取/写入、全局排序)的场景,建议增大内存值,但不能超过yarn.scheduler.maximum-allocation-mb的值。

Container内存大小

参数:yarn.scheduler.maximum-allocation-mb

默认:6144MB

说明:yarn.scheduler.maximum-allocation-mb表示ResourceManager给每个container请求分配的最大内存,默认值为6G,该值属于YARN参数,需要在YARN参数配置界面进行配置。

Container CPU相关

map虚拟核数

参数:mapreduce.map.cpu.vcores

默认:1

说明:mapreduce.map.cpu.vcores控制每个map任务需要的CPU核数,默认值为1,对于当前任务是CPU密集型任务(如复杂数学计算)的场景,建议增大该值,但不能超过yarn.scheduler.maximum-allocation-vcores的值。

reduce的虚拟核数

参数:mapreduce.reduce.cpu.vcores

默认:1

说明:mapreduce.reduce.cpu.vcores控制每个reduce任务需要的CPU核数,默认值为1,对于当前任务是CPU密集型任务(如复杂数学计算)的场景,建议增大该值,但不能超过yarn.scheduler.maximum-allocation-vcores的值。

Container的虚拟核数

参数:yarn.scheduler.maximum-allocation-vcores

默认:32

说明:yarn.scheduler.maximum-allocation-vcores表示ResourceManager中每个container请求的最大虚拟CPU核数,默认值是32,该值属于YARN参数,需要在YARN参数配置界面进行配置。

Map数量相关

map数量的计算

主要的决定因素有: input的文件总个数,input的文件大小,集群设置的文件块大小(默认为128M)

假设input目录下有1个文件a,大小为780M,那么hadoop会将该文件a分隔成7个块(6个128m的块和1个12m的块),从而产生7个map数。

假设input目录下有3个文件a,b,c,大小分别为10m,20m,130m,那么hadoop会分隔成4个块(10m,20m,128m,2m),从而产生4个map数,即如果文件大于块大小(128m),那么会拆分,如果小于块大小,则把该文件当成一个块。

如果一个任务有很多小文件(远远小于块大小128m),则每个小文件也会被当做一个块,用一个map任务来完成,而一个map任务启动和初始化的时间远远大于逻辑处理的时间,就会造成很大的资源浪费。而且,同时可执行的map数是受限的。

如果有一个127m的文件,正常会用一个map去完成,但这个文件只有一个或者两个小字段,却有几千万的记录,如果map处理的逻辑比较复杂,用一个map任务去做,肯定也比较耗时。

合并小文件,减少map数

set mapred.max.split.size=100000000; 
set mapred.min.split.size.per.node=100000000; 
set mapred.min.split.size.per.rack=100000000; 
set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;

参数设置说明:最后一句表示执行前进行小文件合并,前面三个参数确定合并文件块的大小,大于文件块大小128m的,按照128m来分隔,小于128m,大于100m的,按照100m来分隔,把那些小于100m的(包括小文件和分割大文件剩下的)进行合并。

文件都很大但任务逻辑复杂,适当增加map数

当input的文件都很大,任务逻辑复杂,map执行非常慢的时候,可以考虑增加Map数,来使得每个map处理的数据量减少,从而提高任务的执行效率。

Select data_desc, 
count(1), 
count(distinct id), 
sum(case when …), 
sum(case when …), 
sum(…) 
from a group by data_desc

如果表a只有一个文件,大小为120M,但包含几千万的记录,如果用1个map去完成这个任务,肯定是比较耗时的,这种情况下,我们要考虑将这一个文件合理的拆分成多个,这样就可以用多个map任务去完成。 
set mapred.reduce.tasks=10; 
create table a_1 as 
select * from a 
distribute by rand(123); 

这样会将a表的记录,随机的分散到包含10个文件的a_1表中,再用a_1代替上面sql中的a表,则会用10个map任务去完成。每个map任务处理大于12M(几百万记录)的数据,效率肯定会好很多。 

根据实际情况,控制map数量需要遵循两个原则:使大数据量利用合适的map数;使单个map任务处理合适的数据量。

Map处理的最大数据量

参数:mapreduce.input.fileinputformat.split.maxsize

默认:256000000字节

说明:对于扫描、过滤数据的逻辑比较复杂、输入数据量较大条数较多的场景,建议按照实际情况适当调小该参数的值,如128000000或是64000000,这样由于每个map处理的数据变少,map数增加了,提高了并行计算的力度,整体效率会提升。

每个节点Map分片最小值

参数:mapred.min.split.size.per.node

默认:1字节

说明:对于输入数据文件存在大量小文件的场景,建议分别设置该参数的值为128000000,使map启动前对大量小文件进行合并。

每个机架Map分片最小值

参数:mapred.min.split.size.per.rack

默认:1字节

说明:对于输入数据文件存在大量小文件的场景,建议分别设置该参数的值为128000000,使map启动前对大量小文件进行合并。

Reduce数量相关

reduce数量计算

reduce个数的设定极大影响任务执行效率,不指定reduce个数的情况下,Hive会猜测确定一个reduce个数,基于以下两个设定: 

参数1:hive.exec.reducers.bytes.per.reducer(每个reduce任务处理的数据量,默认为1G) 

参数2:hive.exec.reducers.max(每个任务最大的reduce数,默认为999) 

计算reducer数的公式N=min(参数2,总输入数据量/参数1) ,即,如果reduce的输入(map的输出)总大小不超过1G,那么只会有一个reduce任务; 

如:select pt,count(1) from popt_tbaccountcopy_mes where pt = ‘2012-07-04’ group by pt; 
/group/p_sdo_data/p_sdo_data_etl/pt/popt_tbaccountcopy_mes/pt=2012-07-04 总大小为9G多,因此这句有10个reduce

增加reduce个数的方法

调整reduce个数方法一: 
调整hive.exec.reducers.bytes.per.reducer参数的值; 
set hive.exec.reducers.bytes.per.reducer=500000000; (500M) 
select pt,count(1) from popt_tbaccountcopy_mes where pt = ‘2019-07-04’ group by pt; 这次有20个reduce

调整reduce个数方法二; 
set mapred.reduce.tasks = 15; 
select pt,count(1) from popt_tbaccountcopy_mes where pt = ‘2019-07-04’ group by pt;这次有15个reduce

同map一样,启动和初始化reduce也会消耗时间和资源。

只有一个reduce的情况

很多时候你会发现任务中不管数据量多大,不管有没有设置调整reduce个数的参数,任务中一直都只有一个reduce任务;其实只有一个reduce任务的情况,除了数据量小于hive.exec.reducers.bytes.per.reducer参数值的情况外,还有以下原因: 
a) 没有group by的汇总,比如把select pt,count(1) from popt_tbaccountcopy_mes where pt = '2019-07-04' group by pt; 写成 select count(1) from popt_tbaccountcopy_mes where pt = '2019-07-04'; 
b) 用了Order by 
c) 有笛卡尔积 
在设置reduce个数的时候也需要考虑这两个原则:使大数据量利用合适的reduce数;使单个reduce任务处理合适的数据量。

每个reduce任务处理的数据量

参数:hive.exec.reducers.bytes.per.reducer

默认:256000000字节(256M)

说明:对于关联、聚合、排序时reduce端待处理数据量较大的场景,当发现reduce处理速度很慢时,建议按照实际情况适当调小该参数的值,这样由于每个reduce处理的数据变少,reduce数增加了,提高了并行计算的力度,整体效率会提升。

最大reduce数

参数:hive.exec.reducers.max

默认:999

说明:建议根据集群总体资源情况,以及分配给当前租户的资源情况,设置该参数值为当前租户所能启动的最大的container数。

reduce任务数量

参数:mapred.reduce.tasks

默认:-1

说明:mapred.reduce.tasks表示reduce任务数量,默认值为-1,表示由Hive根据输入数据量除以hive.exec.reducers.bytes.per.reducer参数的值自动计算reduce的任务数量。

该值的优先级高于根据hive.exec.reducers.bytes.per.reducer参数的自动计算。

对于关联、聚合、排序时reduce端待处理数据量较大的场景,当发现reduce处理速度很慢时,建议按照实际情况调高该参数的值,但不能超过hive.exec.reducers.max的值。

Hive优化器相关

相关性优化开关

参数:hive.optimize.correlation

默认:false

说明:相关性优化,旨在利用下面两种查询的相关性:

(a)输入相关性:在原始operator树中,同一个输入表被多个MapReduce任务同时使用的场景;

(b)作业流程的相关性:两个有依赖关系的MapReduce的任务的shuffle方式相同。

相关性优化特性可以减少MR任务个数,从而提升整体效率,建议设置为true。

Hive使用Tez引擎参数设置建议

set hive.execution.engine=tez;
set mapred.job.name=recommend_user_profile_$idate;
set mapred.reduce.tasks=-1;
set hive.exec.reducers.max=160;
set hive.auto.convert.join=true;
set hive.exec.parallel=true;
set hive.exec.parallel.thread.number=16;
set hive.optimize.skewjoin=true;
set hive.exec.reducers.bytes.per.reducer=100000000;
set mapred.max.split.size=200000000;
set mapred.min.split.size.per.node=100000000;
set mapred.min.split.size.per.rack=100000000;
set hive.hadoop.supports.splittable.combineinputformat=true;
set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;

 

参数详细列表

hive.exec.mode.local.auto
决定 Hive 是否应该自动地根据输入文件大小,在本地运行(在GateWay运行)
true

hive.exec.mode.local.auto.inputbytes.max
如果 hive.exec.mode.local.auto 为 true,当输入文件大小小于此阈值时可以自动在本地模式运行,默认是 128兆。
134217728L

hive.exec.mode.local.auto.tasks.max
如果 hive.exec.mode.local.auto 为 true,当 Hive Tasks(Hadoop Jobs)小于此阈值时,可以自动在本地模式运行。
4

hive.auto.convert.join
是否根据输入小表的大小,自动将 Reduce 端的 Common Join 转化为 Map Join,从而加快大表关联小表的 Join 速度。
false

hive.mapred.local.mem
Mapper/Reducer 在本地模式的最大内存量,以字节为单位,0为不限制。
0

mapred.reduce.tasks
所提交 Job 的 reduer 的个数,使用 Hadoop Client 的配置。
1

hive.exec.scratchdir
HDFS路径,用于存储不同 map/reduce 阶段的执行计划和这些阶段的中间输出结果。
/tmp/&lt;user.name&gt;/hive

hive.metastore.warehouse.dir
Hive 默认的数据文件存储路径,通常为 HDFS 可写的路径。
"

hive.groupby.skewindata
决定 group by 操作是否支持倾斜的数据。
false

hive.merge.mapfiles
是否开启合并 Map 端小文件,对于 Hadoop 0.20 以前的版本,起一首新的 Map/Reduce Job,对于 0.20 以后的版本,则是起使用 CombineInputFormat 的 MapOnly Job。
true

hive.merge.mapredfiles
是否开启合并 Map/Reduce 小文件,对于 Hadoop 0.20 以前的版本,起一首新的 Map/Reduce Job,对于 0.20 以后的版本,则是起使用 CombineInputFormat 的 MapOnly Job。
false

hive.default.fileformat
Hive 默认的输出文件格式,与创建表时所指定的相同,可选项为 'TextFile' 、 'SequenceFile' 或者 'RCFile'。
'TextFile'

hive.mapred.mode
Map/Redure 模式,如果设置为 strict,将不允许笛卡尔积。
'nonstrict'

hive.exec.parallel
是否开启 map/reduce job的并发提交。
false

hive.security.authorization.enabled
Hive 是否开启权限认证。
false

hive.exec.plan
Hive 执行计划的路径,会在程序中自动进行设置
null

hive.exec.submitviachild
决定 map/reduce Job 是否应该使用各自独立的 JVM 进行提交(Child进程),默认情况下,使用与 HQL compiler 相同的 JVM 进行提交。
false

hive.exec.script.maxerrsize
通过 TRANSFROM/MAP/REDUCE 所执行的用户脚本所允许的最大的序列化错误数。
100000

hive.exec.script.allow.partial.consumption
是否允许脚本只处理部分数据,如果设置为 true ,因 broken pipe 等造成的数据未处理完成将视为正常。
false

hive.exec.compress.output
决定查询中最后一个 map/reduce job 的输出是否为压缩格式。
false

hive.exec.compress.intermediate
决定查询的中间 map/reduce job (中间 stage)的输出是否为压缩格式。
false

hive.intermediate.compression.codec
中间 map/reduce job 的压缩编解码器的类名(一个压缩编解码器可能包含多种压缩类型),该值可能在程序中被自动设置。


hive.intermediate.compression.type
中间 map/reduce job 的压缩类型,如 "BLOCK" "RECORD"。

hive.exec.reducers.bytes.per.reducer
每一个 reducer 的平均负载字节数。
1000000000

hive.exec.reducers.max
reducer 个数的上限。
999

hive.exec.pre.hooks
语句层面,整条 HQL 语句在执行前的 hook 类名。
"

hive.exec.post.hooks
语句层面,整条 HQL 语句在执行完成后的 hook 类名。


hive.exec.parallel.thread.number
并发提交时的并发线程的个数。
8

hive.mapred.reduce.tasks.speculative.execution
是否开启 reducer 的推测执行,与 mapred.reduce.tasks.speculative.execution 作用相同。
false

hive.exec.counters.pull.interval
客户端拉取 progress counters 的时间,以毫秒为单位。
1000L

hive.exec.dynamic.partition
是否打开动态分区。
false

hive.exec.dynamic.partition.mode
打开动态分区后,动态分区的模式,有 strict 和 nonstrict 两个值可选,strict 要求至少包含一个静态分区列,nonstrict 则无此要求。
strict

hive.exec.max.dynamic.partitions
所允许的最大的动态分区的个数。
1000

hive.exec.max.dynamic.partitions.pernode
单个 reduce 结点所允许的最大的动态分区的个数。
100

hive.exec.default.partition.name
默认的动态分区的名称,当动态分区列为''或者null时,使用此名称。''
'__HIVE_DEFAULT_PARTITION__'

hadoop.bin.path
Hadoop Client 可执行脚本的路径,该路径用于通过单独的 JVM 提交 job,使用 Hadoop Client 的配置。
$HADOOP_HOME/bin/hadoop

hadoop.config.dir
Hadoop Client 配置文件的路径,使用 Hadoop Client 的配置。
$HADOOP_HOME/conf

fs.default.name
Namenode 的 URL,使用 Hadoop Client 的配置。
file:///

map.input.file
Map 的输入文件,使用 Hadoop Client 的配置。
null

mapred.input.dir
Map 的输入目录,使用 Hadoop Client 的配置。
null

mapred.input.dir.recursive
输入目录是否可递归嵌套,使用 Hadoop Client 的配置。
false

mapred.job.tracker
Job Tracker 的 URL,使用 Hadoop Client 的配置,如果这个配置设置为 'local',将使用本地模式。
local

mapred.job.name
Map/Reduce 的 job 名称,如果没有设置,则使用生成的 job name,使用 Hadoop Client 的配置。
null

mapred.reduce.tasks.speculative.execution
Map/Reduce 推测执行,使用 Hadoop Client 的配置。
null

hive.metastore.metadb.dir
Hive 元数据库所在路径。
"

hive.metastore.uris
Hive 元数据的 URI,多个 thrift://地址,以英文逗号分隔。
"

hive.metastore.connect.retries
连接到 Thrift 元数据服务的最大重试次数。
3

javax.jdo.option.ConnectionPassword
JDO 的连接密码。
"

hive.metastore.ds.connection.url.hook
JDO 连接 URL Hook 的类名,该 Hook 用于获得 JDO 元数据库的连接字符串,为实现了 JDOConnectionURLHook 接口的类。
"

javax.jdo.option.ConnectionURL
元数据库的连接 URL。
"

hive.metastore.ds.retry.attempts
当没有 JDO 数据连接错误后,尝试连接后台数据存储的最大次数。
1

hive.metastore.ds.retry.interval
每次尝试连接后台数据存储的时间间隔,以毫秒为单位。
1000

hive.metastore.force.reload.conf
是否强制重新加载元数据配置,一但重新加载,该值就会被重置为 false。
false

hive.metastore.server.min.threads
Thrift 服务线程池的最小线程数。
8

hive.metastore.server.max.threads
Thrift 服务线程池的最大线程数。
0x7fffffff

hive.metastore.server.tcp.keepalive
Thrift 服务是否保持 TCP 连接。
true

hive.metastore.archive.intermediate.original
用于归档压缩的原始中间目录的后缀,这些目录是什么并不重要,只要能够避免冲突即可。
'_INTERMEDIATE_ORIGINAL'

hive.metastore.archive.intermediate.archived
用于归档压缩的压缩后的中间目录的后缀,这些目录是什么并不重要,只要能够避免冲突即可。
'_INTERMEDIATE_ARCHIVED'

hive.metastore.archive.intermediate.extracted
用于归档压缩的解压后的中间目录的后缀,这些目录是什么并不重要,只要能够避免冲突即可。
'_INTERMEDIATE_EXTRACTED'

hive.cli.errors.ignore
是否忽略错误,对于包含多的 SQL 文件,可以忽略错误的行,继续执行下一行。
false

hive.session.id
当前会话的标识符,格式为“用户名_时间”用于记录在 job conf 中,一般不予以手动设置。
"

hive.session.silent
当前会话是否在 silent 模式运行。 如果不是 silent 模式,所以 info 级打在日志中的消息,都将以标准错误流的形式输出到控制台。
false

hive.query.string
当前正在被执行的查询字符串。
"

hive.query.id
当前正在被执行的查询的ID。
"

hive.query.planid
当前正在被执行的 map/reduce plan 的 ID。
"

hive.jobname.length
当前 job name 的最大长度,hive 会根据此长度省略 job name 的中间部分。
50

hive.jar.path
通过单独的 JVM 提交 job 时,hive_cli.jar 所在的路径
"

hive.aux.jars.path
各种由用户自定义 UDF 和 SerDe 构成的插件 jar 包所在的路径。
"

hive.added.files.path
ADD FILE 所增加的文件的路径。
"

hive.added.jars.path
ADD JAR 所增加的文件的路径。
"

hive.added.archives.path
ADD ARCHIEVE 所增加的文件的路径。
"

hive.table.name
当前的 Hive 表的名称,该配置将通过 ScirptOperator 传入到用户脚本中。
"

hive.partition.name
当前的 Hive 分区的名称,该配置将通过 ScriptOperator 传入到用户脚本中。
"

hive.script.auto.progress
脚本是否周期性地向 Job Tracker 发送心跳,以避免脚本执行的时间过长,使 Job Tracker 认为脚本已经挂掉了。
false

hive.script.operator.id.env.var
用于识别 ScriptOperator ID 的环境变量的名称。
'HIVE_SCRIPT_OPERATOR_ID'

hive.alias
当前的 Hive 别名,该配置将通过 ScriptOpertaor 传入到用户脚本中。
"

hive.map.aggr
决定是否可以在 Map 端进行聚合操作
true

hive.join.emit.interval
Hive Join 操作的发射时间间隔,以毫秒为单位。
1000

hive.join.cache.size
Hive Join 操作的缓存大小,以字节为单位。
25000

hive.mapjoin.bucket.cache.size
Hive Map Join 桶的缓存大小,以字节为单位。
100

hive.mapjoin.size.key
Hive Map Join 每一行键的大小,以字节为单位。
10000

hive.mapjoin.cache.numrows
Hive Map Join 所缓存的行数。
25000

hive.groupby.mapaggr.checkinterval
对于 Group By 操作的 Map 聚合的检测时间,以毫秒为单位。
100000

hive.map.aggr.hash.percentmemory
Hive Map 端聚合的哈稀存储所占用虚拟机的内存比例。
0.5

hive.map.aggr.hash.min.reduction
Hive Map 端聚合的哈稀存储的最小 reduce 比例。
0.5

hive.udtf.auto.progress
Hive UDTF 是否周期性地报告心跳,当 UDTF 执行时间较长且不输出行时有用。
false

hive.fileformat.check
Hive 是否检查输出的文件格式。
true

hive.querylog.location
Hive 实时查询日志所在的目录,如果该值为空,将不创建实时的查询日志。
'/tmp/$USER'

hive.script.serde
Hive 用户脚本的 SerDe。
'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'

hive.script.recordreader
Hive 用户脚本的 RecordRedaer。
'org.apache.hadoop.hive.ql.exec.TextRecordReader'

hive.script.recordwriter
Hive 用户脚本的 RecordWriter。
'org.apache.hadoop.hive.ql.exec.TextRecordWriter'

hive.hwi.listen.host
HWI 所绑定的 HOST 或者 IP。
'0.0.0.0'

hive.hwi.listen.port
HWI 所监听的 HTTP 端口。
9999

hive.hwi.war.file
HWI 的 war 文件所在的路径。
$HWI_WAR_FILE

hive.test.mode
是否以测试模式运行 Hive
false

hive.test.mode.prefix
Hive 测试模式的前缀。
'test_'

hive.test.mode.samplefreq
Hive 测试模式取样的频率,即每秒钟取样的次数。
32

hive.test.mode.nosamplelist
Hive 测试模式取样的排除列表,以逗号分隔。
"

hive.merge.size.per.task
每个任务合并后文件的大小,根据此大小确定 reducer 的个数,默认 256 M。
256000000

hive.merge.smallfiles.avgsize
需要合并的小文件群的平均大小,默认 16 M。
16000000

hive.optimize.skewjoin
是否优化数据倾斜的 Join,对于倾斜的 Join 会开启新的 Map/Reduce Job 处理。
false

hive.skewjoin.key
倾斜键数目阈值,超过此值则判定为一个倾斜的 Join 查询。
1000000

hive.skewjoin.mapjoin.map.tasks
处理数据倾斜的 Map Join 的 Map 数上限。
10000

hive.skewjoin.mapjoin.min.split
处理数据倾斜的 Map Join 的最小数据切分大小,以字节为单位,默认为32M。
33554432

mapred.min.split.size
Map Reduce Job 的最小输入切分大小,与 Hadoop Client 使用相同的配置。
1

hive.mergejob.maponly
是否启用 Map Only 的合并 Job。
true

hive.heartbeat.interval
Hive Job 的心跳间隔,以毫秒为单位。
1000

hive.mapjoin.maxsize
Map Join 所处理的最大的行数。超过此行数,Map Join进程会异常退出。
1000000

hive.hashtable.initialCapacity
Hive 的 Map Join 会将小表 dump 到一个内存的 HashTable 中,该 HashTable 的初始大小由此参数指定。
100000

hive.hashtable.loadfactor
Hive 的 Map Join 会将小表 dump 到一个内存的 HashTable 中,该 HashTable 的负载因子由此参数指定。
0.75

hive.mapjoin.followby.gby.localtask.max.memory.usage
MapJoinOperator后面跟随GroupByOperator时,内存的最大使用比例
0.55

hive.mapjoin.localtask.max.memory.usage
Map Join 的本地任务使用堆内存的最大比例
0.9

hive.mapjoin.localtask.timeout
Map Join 本地任务超时,淘宝版特有特性
600000

hive.mapjoin.check.memory.rows
设置每多少行检测一次内存的大小,如果超过 hive.mapjoin.localtask.max.memory.usage 则会异常退出,Map Join 失败。
100000

hive.debug.localtask
是否调试本地任务,目前该参数没有生效
false

hive.task.progress
是否开启 counters ,以记录 Job 执行的进度,同时客户端也会拉取进度 counters。
false

hive.input.format
Hive 的输入 InputFormat。
默认是org.apache.hadoop.hive.ql.io.HiveInputFormat,其他还有org.apache.hadoop.hive.ql.io.CombineHiveInputFormat

hive.enforce.bucketing
是否启用强制 bucketing。
false

hive.enforce.sorting
是否启用强制排序。
false

hive.mapred.partitioner
Hive 的 Partitioner 类。
'org.apache.hadoop.hive.ql.io.DefaultHivePartitioner'

hive.exec.script.trust
Hive Script Operator For trust
false

hive.hadoop.supports.splittable.combineinputformat
是否支持可切分的 CombieInputFormat
false

hive.optimize.cp
是否优化列剪枝。
true

hive.optimize.ppd
是否优化谓词下推。
true

hive.optimize.groupby
是否优化 group by。
true

hive.optimize.bucketmapjoin
是否优化 bucket map join。
false

hive.optimize.bucketmapjoin.sortedmerge
是否在优化 bucket map join 时尝试使用强制 sorted merge bucket map join。
false

hive.optimize.reducededuplication
是否优化 reduce 冗余。
true

hive.hbase.wal.enabled
是否开启 HBase Storage Handler。
true

hive.archive.enabled
是否启用 har 文件。
false

hive.archive.har.parentdir.settable
是否启用 har 文件的父目录可设置。
false

hive.outerjoin.supports.filters
是否启动外联接支持过滤条件。
true

hive.fetch.output.serde
对于 Fetch Task 的 SerDe 类
'org.apache.hadoop.hive.serde2.DelimitedJSONSerDe'

hive.semantic.analyzer.hook
Hive 语义分析的 Hook,在语义分析阶段的前后被调用,用于分析和修改AST及生成的执行计划,以逗号分隔。
null

hive.cli.print.header
是否显示查询结果的列名,默认为不显示。
false

hive.cli.encoding
Hive 默认的命令行字符编码。
'UTF8'

hive.log.plan.progress
是否记录执行计划的进度。
true

hive.pull.progress.counters
是否从 Job Tracker 上拉取 counters,淘宝特有配置项。
true

hive.job.pre.hooks
每个 Job 提交前执行的 Hooks 列表,以逗号分隔,淘宝特有配置项。
"

hive.job.post.hooks
每个 Job 完成后执行的 Hooks 列表,以逗号分隔,淘宝特有配置项。
"

hive.max.progress.counters
Hive 最大的进度 couters 个数,淘宝特有配置项。
100

hive.exec.script.wrapper
Script Operator 脚本调用的封装,通常为脚本解释程序。例如,可以把该变量值的名称设置为"python",那么传递到 Script Operator 的脚本将会以"python &lt;script command&gt;"的命令形式进行调用,如果这个值为null或者没有设置,那么该脚本将会直接以"&lt;script command&gt;"的命令形式调用。
null

hive.check.fatal.errors.interval
客户端通过拉取 counters 检查严重错误的周期,以毫秒为单位,淘宝特有配置项。
5000L

收藏
登录发表你的评论
0条评论