AdminManual Configuration

Configuring Hive

Management 员可以使用 Hive 中的许多配置变量来更改其安装和用户会话的行为。可以按照以下任意一种方式配置这些变量,以优先 Sequences 显示:

  • 使用CLIBeeline中的 set 命令 来为 set 命令之后的所有语句设置配置变量的会话级别值。例如,以下命令将所有后续语句的暂存目录(Hive 用于存储临时输出和计划)设置为/tmp/mydir
set hive.exec.scratchdir=/tmp/mydir;
  • 在整个会话中使用hive命令(在 CLI 中)或beeline命令的 --hiveconf 选项。例如:
bin/hive --hiveconf hive.exec.scratchdir=/tmp/mydir
<property>
    <name>hive.exec.scratchdir</name>
    <value>/tmp/mydir</value>
    <description>Scratch space for Hive jobs</description>
  </property>
  • 在“服务器特定的配置文件”中(从Hive 0.14开始受支持)。您可以在 hivemetastore-site.xml 中设置特定于 metastore 的配置值,并在 hiveserver2-site.xml 中设置特定于 HiveServer2 的配置值。
    特定于服务器的配置文件在两种情况下很有用:

    • 您希望为一种类型的服务器使用不同的配置(例如,仅在 HiveServer2 中启用授权,而在 CLI 中启用授权)。

    • 您只想在服务器特定的配置文件中设置配置值(例如,仅在 metastore 服务器配置文件中设置 metastore 数据库密码)。

HiveMetastore 服务器读取$ HIVE_CONF_DIR 或 Classpath 中可用的 hive-site.xml 以及 hivemetastore-site.xml 配置文件。如果该 metastore 在hive命令行或 HiveServer2 中以嵌入式模式使用(即,hive.metastore.uris 未设置或为空),则 hivemetastore-site.xml 也将由父进程加载。
检查 hive.metastore.uris 的值以确定它,并且应该在 hive-site.xml 中适当地设置该值。
元 StoreClient 端和服务器使用某些Metastore 配置参数,例如 hive.metastore.sasl.enabled,hive.metastore.kerberos.principal,hive.metastore.execute.setugi 和 hive.metastore.thrift.framed.transport.enabled。对于此类常用参数,最好在 hive-site.xml 中设置值,这将有助于保持它们的一致性。

HiveServer2 读取$ HIVE_CONF_DIR 或 Classpath 中可用的 hive-site.xml 以及 hiveserver2-site.xml。
如果 HiveServer2 以嵌入式模式使用元存储,则还将加载 hivemetastore-site.xml。

配置文件的优先级 Sequences 如下(后一优先级更高)–
hive-site.xml-> hivemetastore-site.xml-> hiveserver2-site.xml->'-hiveconf'命令行参数。

hive-site.xml 和 hive-default.xml.template

hive-default.xml.template包含预先打包在 Hive 发行版中的各种配置变量的默认值。为了覆盖任何值,请改为创建hive-site.xml并在该文件中设置该值,如上所示。

hive-default.xml.template位于安装根目录的conf目录中,并且hive-site.xml也应在同一目录中创建。

请注意,Hive 完全不使用模板文件hive-default.xml.template(从 Hive 0.9.0 开始)–配置选项的规范列表仅在HiveConf java 类中 Management。模板文件具有hive-site.xml所需的格式,因此您可以将配置文件从模板文件粘贴到hive-site.xml中,然后将其值更改为所需的配置。

在 Hive 版本 0.9.0 到 0.13.1 中,模板文件不一定包含在HiveConf.java中找到的所有配置选项,并且其某些值和描述可能已过时或与实际值和描述不同步。但是,自Hive 0.14.0起,模板文件直接由HiveConf.java生成,因此它是配置变量及其默认值的可靠来源。

Management 配置变量在below中列出。用户变量在配置单元配置属性中列出。从Hive 0.14.0开始,您可以使用SHOF CONF 命令显示有关配置变量的信息。

Temporary Folders

Hive 在运行 HiveClient 端的计算机和默认 HDFS 实例上都使用临时文件夹。这些文件夹用于存储每个查询的临时/中间数据集,通常在完成查询后由配置单元 Client 端清除。但是,如果配置单元 Client 端异常终止,则可能会遗留一些数据。具体配置如下:

  • 在 HDFS 群集上,默认情况下将其设置为*/tmp/hive-<username> ,并由配置变量 hive.exec.scratchdir *控制

  • 在 Client 端计算机上,这被硬编码为*/tmp /<username> *

请注意,将数据写入表/分区时,Hive 将首先写入目标表文件系统上的临时位置(使用 hive.exec.scratchdir 作为临时位置),然后将数据移至目标表。这适用于所有情况-表是存储在 HDFS(普通情况)中还是存储在 S3 或 NFS 之类的文件系统中。

Log Files

HiveClient 端在 Client 端计算机上生成日志和历史记录文件。有关配置的详细信息,请参见Hive Logging

有关 WebHCat 日志,请参阅WebHCat manual中的Log Files

Derby 服务器模式

Derby是 Hive Metastore(Metadata Store)的默认数据库。要将 Derby 作为多个用户的 Web Service 器运行,请参见Hive 在服务器模式下使用 Derby

Configuration Variables

HiveManagement 的配置变量大致分为以下几类:

另请参阅Language Manual中的配置单元配置属性以获取非 Management 配置变量。

Version information: Metrics

HIVE-10761在版本 1.3.0 和 2.0.0 中引入了基于 Codahale 的新 HiveMetrics 系统。要对其进行配置或还原为旧的 Metrics 系统,请参见Hive 配置属性的“度量”部分

配置单元配置变量

Variable NameDescriptionDefault Value
hive.ddl.output.format用于 DDL 输出的数据格式(例如DESCRIBE table)。 “文本”(用于人类可读文本)或“ json”(用于 json 对象)之一。 (从 Hive 0.9.0开始。)text
hive.exec.script.wrapper包装任何对脚本运算符的调用,例如如果将其设置为 python,则传递给脚本运算符的脚本将以python <script command>的形式调用。如果该值为 null 或未设置,则脚本以<script command>的形式调用。null
hive.exec.plannull
hive.exec.scratchdirHive 使用此目录来存储用于查询的不同 Map/归约阶段的计划,以及存储这些阶段的中间输出。

* Hive 0.14.0 及更高版本:* Hive 作业的 HDFS 根暂存目录,该目录是使用全部写入(733)权限创建的。对于每个连接用户,将使用${hive.scratch.dir.permission}。
/tmp /<user.name>/hive(Hive 0.8.0 及更低版本)创建一个 HDFS 临时目录${hive.exec.scratchdir} /<username>。


/ tmp/hive-<user.name>(从 Hive 0.8.1 到 0.14.0)

/ tmp/hive(配置单元0.14.0及更高版本)|
| hive.scratch.dir.permission |在根临时目录${hive.exec.scratchdir}中创建的用户特定的临时目录的权限。 (自 Hive 0.12.0开始。)| 700(Hive 0.12.0 及更高版本)|
| hive.exec.local.scratchdir |当 Hive 在本地模式下运行时,此目录用于临时文件。 (从 Hive 0.10.0开始)|/tmp /<user.name> |
| hive.exec.submitviachild |确定是否应在 nonlocal 模式下通过单独的 jvm 提交 map/reduce 作业。| false-默认情况下,作业通过与编译器相同的 jvm 提交|
| hive.exec.script.maxerrsize |通过TRANSFORMMAPREDUCE构造调用的用户脚本中允许的最大序列化错误数。| 100000 |
| hive.exec.compress.output |确定查询中最终 map/reduce 作业的输出是否被压缩。
| hive.exec.compress.intermediate |确定查询中的中间 map/reduce 作业的输出是否已压缩。| false |
| hive.resource.use.hdfs.location |直接参考基于 HDFS 的文件/ jar,而不是复制到基于会话的 HDFS 暂存目录。 (自 Hive 2.2.1起。)| true |
| hive.jar.path |在单独的 jvm 中提交作业时使用的 hive_cli.jar 的位置。
| hive.aux.jars.path |包含用户定义的函数和 SerDes 的实现的插件 jar 的位置。
| hive.reloadable.aux.jars.path |可以通过执行直线重新加载命令来更新(添加,删除或更新)插件 jar 的位置,而不必重新启动 HiveServer2.这些 jar 可以像 hive.aux.jars.path 用于创建 UDF 或 SerDes中的辅助类一样使用。 (从 Hive 0.14.0开始。)| |
| hive.partition.pruning |此变量的严格值表示如果在分区表上未提供分区谓词的情况下,编译器将引发错误。 | nonstrict |用于防止用户无意对表的所有分区发出查询。
| hive.map.aggr |确定是否启用 Map 侧聚合。| true |
|hive.join.emit.interval||1000|
|hive.map.aggr.hash.percentmemory||(float)0.5|
| hive.default.fileformat | CREATE TABLE 语句的默认文件格式。选项是 TextFile,SequenceFile,RCFile 和 Orc。| TextFile |
| hive.merge.mapfiles |在仅 Map 作业结束时合并小文件。| true |
| hive.merge.mapredfiles |在 Map 缩减作业结束时合并小文件。| false |
| hive.merge.size.per.task |作业结束时合并文件的大小。| 256000000 |
| hive.merge.smallfiles.avgsize |当作业的平均输出文件大小小于此数字时,Hive 将启动另一个 map-reduce 作业以将输出文件合并为更大的文件。 | 16000000 |仅当 hive.merge.mapfiles 为 true 时才对仅 Map 的作业执行此操作,而对于 hive.merge.mapredfiles 为 true 则对 map 减少作业的操作。
| hive.querylog.enable.plan.progress |是否在每次检查作业进度时记录计划的进度。这些日志将写入到hive.querylog.location指定的位置。 (自 Hive 0.10起。)| true |
| hive.querylog.location |创建结构化配置单元查询日志的目录。在该目录中,每个会话创建一个文件。如果将此变量设置为空字符串,将不会创建结构化日志。|/tmp /<user.name> |
| hive.querylog.plan.progress.interval |记录计划进度的间隔时间,以毫秒为单位。如果 Map 程序或化简程序的进度发生整数百分比变化,则无论此值如何,都会记录进度。实际间隔将是(此值除以hive.exec.counters.pull.interval的值)的上限乘以hive.exec.counters.pull.interval的值,即,如果不均等地除以hive.exec.counters.pull.interval的值,则记录的时间间隔将比指定的时间少。仅当hive.querylog.enable.plan.progress设置为true时才有效。 (自 Hive 0.10起。)| 60000 |
| hive.stats.autogather |一个标志,用于在 INSERT OVERWRITE 命令期间自动收集统计信息。 (自 Hive 0.7.0起。)| true |
| hive.stats.dbclass |存储临时配置单元统计信息的默认数据库。有效值为hbasejdbc,而jdbc应该具有要使用的数据库规范,并用冒号分隔(例如jdbc:mysql)。 (从 Hive 0.7.0开始。)| jdbc:derby |
| hive.stats.dbconnectionstring |存储临时配置单元统计信息的数据库的默认连接字符串。 (从 Hive 0.7.0开始。)| jdbc:derby:; databaseName = TempStatsStore; create = true |
| hive.stats.jdbcdriver |用于存储临时配置单元统计信息的数据库的 JDBC 驱动程序。 (从 Hive 0.7.0开始)| org.apache.derby.jdbc.EmbeddedDriver |
| hive.stats.reliable |由于无法完全准确地收集统计信息,查询是否会失败。如果将其设置为 true,则由于无法准确计算统计信息,因此可能无法从分区读取/向分区写入数据。 (自 Hive 0.10.0起。)| false |
| hive.enforce.bucketing |如果启用,则将对插入到存储桶的表中的插入也进行存储桶。 (仅 Hive 0.6.0 到 Hive 1.x.x)| false |
| hive.variable.substitute |替换以前使用set命令设置的 Hive 语句中的变量,系统变量或环境变量。有关详情,请参见HIVE-1096。 (从 Hive 0.7.0 开始.)| true |
| hive.variable.substitute.depth |替换引擎将执行的最大替换次数。 (从 Hive 0.10.0开始。)| 40 |
| hive.vectorized.execution.enabled |此标志控制HIVE-4160中记录的查询执行的矢量化模式。 (从 Hive 0.13.0开始。)| false |

Hive Metastore 配置变量

有关用于以本地,远程或嵌入式模式设置元存储库的配置变量的信息,请参阅Hive MetastoreManagement。另请参见语言手册配置单元配置属性Metastore部分中的描述。

有关安全性配置(Hive 0.10 和更高版本),请参见《语言手册》的配置单元配置属性中的Hive Metastore 安全部分。

用于与 Hadoop 交互的配置变量

变量名称DescriptionDefault Value
hadoop.bin.path通过单独的 JVM 提交作业时用于向 Hadoop 提交作业的 Hadoop 脚本的位置。$HADOOP_HOME/bin/hadoop
hadoop.config.dirHadoop 安装的配置目录的位置。$HADOOP_HOME/conf
fs.default.name文件系统的默认名称(例如,hdfs://:8020 的 localhost)。

对于 YARN,此配置变量称为 fs.defaultFS。
file:///
map.input.file正在读取 Map 的文件名。
mapred.job.tracker作业跟踪程序的网址。如果将其设置为 local,则 map/reduce 将在本地模式下运行。
mapred.reduce.tasks查询计划中每个 map/reduce 阶段的化简器数。1
mapred.job.nameMap/缩小作业的名称。
mapreduce.input.fileinputformat.split.maxsize对于可拆分数据,这将更改分配给每个 Map 器的数据部分。默认情况下,每个 Map 器都是根据源文件的块大小分配的。Importing 大于块大小的值将减少分割数,从而创建较少的 Map 器。Importing 小于块大小的值将增加创建更多 Map 器的分割数量。
fs.trash.interval以分钟为单位的时间间隔,在此间隔之后,将删除垃圾检查点目录。 (这也是检查点之间的间隔.)检查点目录位于用户主目录下的.Trash中,其中包含自上一个检查点以来已删除的文件和目录。
任何大于 0 的设置都会启用 HDFS 的垃圾回收功能。
使用透明数据加密(TDE)功能时,请按照HIVE-10978
0中的说明在 Hadoop core-site.xml 中将其设置为 0.

Hive 变量用于传递运行时信息

Variable NameDescriptionDefault Value
hive.session.idHive 会话的 ID。
hive.query.string查询字符串传递给 map/reduce 作业。
hive.query.planidmap/reduce 阶段的计划 ID。
hive.jobname.length作业名称的最大长度。50
hive.table.nameHive 表的名称。这通过脚本运算符传递给用户脚本。
hive.partition.nameHive 分区的名称。这通过脚本运算符传递给用户脚本。
hive.alias正在处理的别名。这也通过脚本运算符传递给用户脚本。

从 Hive 配置中删除 Hive Metastore 密码

Hive 0.14.0 中使用HIVE-7634HADOOP-10904添加了对此的支持。通过设置 CredentialProvider 来处理密码的存储/检索,可以消除在 Hive 配置中以明文形式保留 Hive Metastore 密码的需要。

  • 使用密钥 javax.jdo.option.ConnectionPassword(与 Hive 配置中使用的密钥相同)设置 CredentialProvider 来存储 Hive Metastore 密码。例如,以下命令将 metastore 密码添加到/usr/lib/hive/conf/hive.jceks 的 JCEKS 密钥库文件中:
$ hadoop credential create javax.jdo.option.ConnectionPassword -provider jceks://file/usr/lib/hive/conf/hive.jceks
Enter password: 
Enter password again: 
javax.jdo.option.ConnectionPassword has been successfully created.
org.apache.hadoop.security.alias.JavaKeyStoreProvider has been updated.

确保仅对运行 Hive Metastore 服务器/ HiveServer2 的用户访问此文件。
有关更多信息,请参见http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/CommandsManual.html#credential

  • 更新 Hive 配置以使用指定的 CredentialProvider。例如,使用我们的/usr/lib/hive/conf/hive.jceks 文件:
<!-- Configure credential store for passwords-->
  <property>
    <name>hadoop.security.credential.provider.path</name>
    <value>jceks://file/usr/lib/hive/conf/hive.jceks</value>
  </property>

这将配置http://hadoop.apache.org/docs/current/api/org/apache/hadoop/conf/Configuration.html#getPassword(java.lang.String)所使用的 CredentialProvider,Hive 使用它来检索元存储区密码。

  • 从 Hive 配置中删除 Hive Metastore 密码条目(javax.jdo.option.ConnectionPassword)。将使用 CredentialProvider 代替。

  • 重新启动 Hive Metastore Server/HiveServer2.

配置 HCatalog 和 WebHCat

HCatalog

从 Hive 版本 0.11.0 开始,HCatalog 随 Hive 一起安装和配置。 HCatalog 服务器与 Hive 元存储相同。

对于 0.11.0 之前的 Hive 发行版,请参见 HCatalog 0.5.0 文档从 Tarball 安装中的“ Thrift 服务器设置”部分。

WebHCat

有关配置 WebHCat 的信息,请参阅WebHCat Configuration