hive 通过将查问划分成一个或多个 MapReduce 工作达到并行处理的目标。每个工作都可能具备多个 mapper 和 reducer 工作,其中至多有一些是能够并行执行的。
确定最佳的 mapper 个数和 reducer 个数取决于多个变量,例如输出的数据量大小以及对这些数据执行的操作类型等。
放弃平衡性是很有必要的,对于 Spark/Hadoop 这样的大数据系统来讲,数据量大并不可怕, 可怕的是数据歪斜,每个节点解决的运算不平衡。
如果有太多的 mapper 或 reducer 工作,就会导致启动阶段、调度和运行 job 过程中产生过多的开销;而如果设置的数量太少,那就有可能没充分利用好集群外在并行性。
mapred.reduce.tasks
所提交 Job 的 reduer 的个数,应用 Hadoop Client 的配置。
1
hive.mapred.mode
Map/Redure 模式,如果设置为 strict,将禁止 3 中类型的查问:
1. 分区表的 where 筛选条件必须含有分区字段;
2. 对应用了 order by 语句的查问,必须应用 limit 语句(order by 语句为执行排序会将所有的后果集数据散发到同一个 reducer 中进行解决,减少 limit 语句能够避免 reducer 额定执行很长时间)
3. 限度笛卡儿积的查问,就是有 where 语句,而没有 on 语句。
‘nonstrict’
hive.merge.mapfiles
在 Map-only 的工作完结时合并小文件
是否开启合并 Map 端小文件,当 Hive 输出由很多个小文件组成,因为每个小文件都会启动一个 map 工作,如果文件过小,会使得 map 工作启动和初始化的工夫大于逻辑解决的工夫,造成资源节约,甚至 OOM。为此,当咱们启动一个工作,发现输出数据量小但工作数量多时,须要留神在 Map 前端进行输出合并。当然,在咱们向一个表写数据时,也须要留神输入文件大小
true
hive.merge.mapredfiles
是否开启合并 Map/Reduce 小文件,即是否在 Map-Reduce 的工作完结时合并小文件
false
hive.exec.parallel
是否开启 map/reduce job 的并发提交。
false
hive.limit.optimize.enable
当应用 LIMIT 语句时,其能够对数据源进行抽样,防止执行整个查问语句,而后再返回局部后果
但这个性能有个毛病,有可能输出中有用的数据永远不会被解决到。
hive.exec.reducers.bytes.per.reducer
每一个 reducer 的均匀负载字节数。
1000000000
hive.exec.reducers.max
设置 reducer 个数的下限,能够阻止某个查问耗费过多的 reducer 资源,对这个属性值大小的设定,一个倡议的计算公式如下:
(集群总 Reduce 槽位个数 *1.5) / (执行中查问的均匀个数)
1.5 倍数是一个教训系数,用于避免未充分利用集群的状况。
999
hive.exec.rowoffset
hive 提供了 2 种虚构列:一种用于将要进行划分的输出文件名,另一种用于文件中的块内偏移量。当 hive 产生了非预期的或 null 的返回后果时,能够通过这些虚构列诊断查问。通过这些“字段”,用户能够查看到哪个文件甚至哪些数据导致呈现问题:
SELECT
INPUT_FILE_NAME,
BLOCK_OFFSET_INSIDE_FILE,
ROW_OFFSET_INSIDE_BLOCK,
line
FROM hive_text
WHERE line LIKE ‘%hive%’ LIMIT 2;
true
hive.multigroupby.singlemr
一个特地的优化,是否将查问中的多个 group by 操作组装到单个 MapReduce 工作中。
false
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__’
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
hive.exec.scratchdir
HDFS 门路,用于存储不同 map/reduce 阶段的执行打算和这些阶段的两头输入后果。
/tmp/<user.name>/hive
hive.metastore.warehouse.dir
Hive 默认的数据文件存储门路,通常为 HDFS 可写的门路。
“
hive.groupby.skewindata
决定 group by 操作是否反对歪斜的数据。
false
hive.default.fileformat
Hive 默认的输入文件格式,与创立表时所指定的雷同,可选项为 ‘TextFile’、‘SequenceFile’ 或者 ‘RCFile’。
‘TextFile’
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.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
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.exec.script.wrapper
Script Operator 脚本调用的封装,通常为脚本解释程序。例如,能够把该变量值的名称设置为 ”python”,那么传递到 Script Operator 的脚本将会以 ”python <script command>” 的命令模式进行调用,如果这个值为 null 或者没有设置,那么该脚本将会间接以 ”<script command>” 的命令模式调用。
null
hive.check.fatal.errors.interval
客户端通过拉取 counters 查看严重错误的周期,以毫秒为单位,淘宝特有配置项。
5000L