apache-hive / 3.1.1 / reference / AdminManual_Metastore_Administration.html

Management 员手动 MetastoreManagement

Hive MetastoreManagement

Note

此页面仅记录 Hive 2.x 和更早版本中的 MetaStore。对于 3.x 和更高版本,请参阅AdminManual Metastore 3.0Management

Introduction

通过 Hive Metastore 访问 Hive 表和分区的所有元数据。元数据使用JPOX ORM 解决方案(Data Nucleus)持久化,因此 Hive 可以使用它支持的任何数据库。支持大多数商业关系数据库和许多开源数据库。请参阅下面的supported databases列表。

您可以找到元存储here的 E/R 图。

有两种使用不同的 Hive 配置来设置 Metastore 服务器和 Metastore 数据库的方法:

保留元数据的“元 Store 数据库”的配置选项:

元 Store 服务器 的配置选项:

基本配置参数

相关配置参数在此处显示。 (非元存储参数在Configuring Hive中进行了描述。另请参见《语言手册》的配置单元配置属性,包括MetastoreHive Metastore 安全。)

另请参见Configuring Hive下的 hivemetastore-site.xml 文档。

Configuration Parameter Description
javax.jdo.option.ConnectionURL 包含元数据的数据存储的 JDBC 连接字符串
javax.jdo.option.ConnectionDriverName 包含元数据的数据存储的 JDBC 驱动程序类名称
hive.metastore.uris Hive 连接到这些 URI 之一,以向远程 Metastore(URI 的逗号分隔列表)发出元数据请求
hive.metastore.local 本地或远程元存储库(从 Hive 0.10删除:如果hive.metastore.uris为空,则假定local模式,否则为remote)
hive.metastore.warehouse.dir 本机表默认位置的 URI

Hive 元存储库是 Stateless 的,因此可以有多个实例来实现高可用性。使用hive.metastore.uris可以指定多个远程元存储。 Hive 将默认使用列表中的第一个,但会在连接失败时随机选择一个,并尝试重新连接。

其他配置参数

以下 metastore 配置参数是从旧文档中继承来的,不能保证它们仍然存在。有关当前的 Hive 配置选项,请参见HiveConf Java 类,有关 metastore 参数的用户友好说明,请参见《语言手册》 配置单元配置属性MetastoreHive Metastore 安全部分。

Configuration Parameter Description Default Value
hive.metastore.metadb.dir 文件存储元数据基本目录的位置。 (功能已在HIVE-143中从 0.4.0 中删除。)
hive.metastore.rawstore.impl 实现 org.apache.hadoop.hive.metastore.rawstore 接口的类的名称。此类用于存储和检索原始元数据对象,例如表,数据库。 (配置单元 0.8.1 及更高版本.)
org.jpox.autoCreateSchema 如果不存在,则在启动时创建必要的架构。 (该架构包括表,列等.)创建一次后将其设置为 false。
org.jpox.fixedDatastore 数据存储架构是否固定。
datanucleus.autoStartMechanism 是否在启动时初始化。
hive.metastore.ds.connection.url.hook 用于检索 JDO 连接 URL 的钩子的名称。如果为空,则将 javax.jdo.option.ConnectionURL 中的值用作连接 URL。 (配置单元 0.6 和更高版本.)
hive.metastore.ds.retry.attempts 如果存在连接错误,重试对备份数据存储的调用的次数。

(Hive 0.6 到 0.12;已从 0.13.0 中删除–改为使用 hive.hmshandler.retry.attempts.)
1
hive.metastore.ds.retry.interval 数据存储重试尝试之间的毫秒数。
(Hive 0.6 到 0.12;从 0.13.0 中删除–改为使用 hive.hmshandler.retry.interval.)
1000
hive.metastore.server.min.threads Thrift 服务器池中的最小工作线程数。
(配置单元 0.6 和更高版本.)
200
hive.metastore.server.max.threads Thrift 服务器池中的最大工作线程数。
(Hive 0.6 及更高版本.)
100000,因为 Hive 0.8.1
hive.metastore.filter.hook Metastore 钩子类,用于进一步过滤 Client 端上的元数据读取结果。
(Hive 1.1.0及更高版本。)
org.apache.hadoop.hive.metastore.DefaultMetaStoreFilterHookImpl
hive.metastore.port Hive Metastore 侦听器端口。
(Hive 1.3.0及更高版本。)
9083

Data Nucleus 自动启动

Configuring datanucleus.autoStartMechanism is highly recommended

强烈建议为数据核配置自动启动。有关更多详细信息,请参见HIVE-4762

<property>
<name>datanucleus.autoStartMechanism</name>
<value>SchemaTable</value>
</property>

Default Configuration

默认配置将设置一个嵌入式元存储库,该存储库将在单元测试中使用,并将在下一节中进行介绍。在后续各节中将介绍更多实用的选项。

本地/嵌入式 Metastore 数据库(Derby)

嵌入式 metastore 数据库主要用于单元测试.一次只能有一个进程可以连接到 metastore 数据库,因此,它并不是一个切实可行的解决方案,但对于单元测试来说效果很好.

对于单元测试,与嵌入式数据库一起使用元存储服务器的本地/嵌入式 Metastore 服务器配置。

Derby 是嵌入式 Metastore 的默认数据库。

Config Param Config Value Comment
javax.jdo.option.ConnectionURL jdbc:derby:;databaseName= ../build/test/junit_metastore_db;create=true 位于 Hive/树干/内部的 Derby 数据库...
javax.jdo.option.ConnectionDriverName org.apache.derby.jdbc.EmbeddedDriver Derby 嵌入了 JDBC 驱动程序类。
hive.metastore.warehouse.dir file://${user.dir}/../build/ql/test/data/warehouse 单元测试数据进入本地文件系统中的此处。

如果要将 Derby 作为 Web Service 器运行,以便可以从多个节点访问 metastore,请参阅Hive 在服务器模式下使用 Derby

远程 Metastore 数据库

在此配置中,您将使用传统的独立 RDBMS 服务器。以下示例配置将在 MySQL 服务器中设置元存储。建议将 Metastore 数据库的此配置用于任何实际用途。

Config Param Config Value Comment
javax.jdo.option.ConnectionURL jdbc:mysql://<host name>/<database name>?createDatabaseIfNotExist=true 元数据存储在 MySQL 服务器中
javax.jdo.option.ConnectionDriverName com.mysql.jdbc.Driver MySQL JDBC 驱动程序类
javax.jdo.option.ConnectionUserName <user name> 连接到 MySQL 服务器的用户名
javax.jdo.option.ConnectionPassword <password> 连接 MySQL 服务器的密码

本地/嵌入式 Metastore 服务器

在本地/嵌入式元 Store 设置中,元 Store 服务器组件的使用就像 Hive Client 中的库一样。每个 HiveClient 端将打开与数据库的连接,并对数据库进行 SQL 查询。由于这是本地存储,因此请确保从执行 Hive 查询的计算机上可以访问该数据库。还要确保 JDBCClient 端库在 Hive Client 的 Classpath 中。此配置通常与 HiveServer2 一起使用(要仅将嵌入式 metastore 与 HiveServer2 一起使用,请在 hiveserver2 start 命令的命令行参数中添加“ --hiveconf hive.metastore.uris =''”,或使用 hiveserver2-site.xml(在 Hive 0.14 中可用)。 ))。

Config Param Config Value Comment
hive.metastore.uris 不需要,因为这是本地 Store
hive.metastore.local true 这是本地 Store(已在 Hive 0.10 中删除,请参见configuration description部分)
hive.metastore.warehouse.dir <base hdfs path> 指向 HDFS 中非外部 Hive 表的默认位置。

远程 Metastore 服务器

在远程 metastore 设置中,所有 HiveClient 端都将连接到 metastore 服务器,该服务器又查询数据存储(在此示例中为 MySQL)以获取元数据。 Metastore 服务器和 Client 端使用Thrift协议进行通信。从 Hive 0.5.0 开始,您可以通过执行以下命令来启动 Thrift 服务器:

hive --service metastore

在低于 0.5.0 的 Hive 版本中,必须通过直接执行 Java 运行 Thrift 服务器:

$JAVA_HOME/bin/java  -Xmx1024m -Dlog4j.configuration=file://$HIVE_HOME/conf/hms-log4j.properties -Djava.library.path=$HADOOP_HOME/lib/native/Linux-amd64-64/ -cp $CLASSPATH org.apache.hadoop.hive.metastore.HiveMetaStore

如果直接执行 Java,则必须正确设置 JAVA_HOME,HIVE_HOME,HADOOP_HOME。 CLASSPATH 应该包含 Hadoop,Hive(lib 和 auxlib)和 Java jar。

服务器配置参数

以下示例使用一个 **** 远程 Metastore 数据库

Config Param Config Value Comment
javax.jdo.option.ConnectionURL jdbc:mysql://<host name>/<database name>?createDatabaseIfNotExist=true 元数据存储在 MySQL 服务器中
javax.jdo.option.ConnectionDriverName com.mysql.jdbc.Driver MySQL JDBC 驱动程序类
javax.jdo.option.ConnectionUserName <user name> 连接到 MySQL 服务器的用户名
javax.jdo.option.ConnectionPassword <password> 连接 MySQL 服务器的密码
hive.metastore.warehouse.dir <base hdfs path> Hive 表的默认位置。
hive.metastore.thrift.bind.host <host_name> 要将 Metastore 服务绑定到的主机名。如果为空,则使用“ localhost”。此配置从 Hive 4.0.0 起可用。

从 Hive 3.0.0(HIVE-16452)开始,元存储数据库存储一个 GUID,元存储 Client 端可以使用 Thrift API get_metastore_db_uuid 查询该 GUID,以标识后端数据库实例。 HiveMetaStoreClient 可以使用方法 getMetastoreDbUuid()访问此 API。

Client 端配置参数

Config Param Config Value Comment
hive.metastore.uris thrift://<host_name>:<port> Thrift Metastore 服务器的主机和端口。如果指定了 hive.metastore.thrift.bind.host,则 host 应该与该配置相同。在动态服务发现配置参数中了解有关此内容的更多信息。
hive.metastore.local false Metastore 是远程的。注意:从 Hive 0.10 开始不再需要此功能。设置* hive.metastore.uri *就足够了。
hive.metastore.warehouse.dir <base hdfs path> 指向 HDFS 中非外部 Hive 表的默认位置。

动态服务发现配置参数

从 Hive 4.0.0(HIVE-20794)开始,类似于 HiveServer2,ZooKeeper 服务可用于远程元存储服务器的动态服务发现。 Metastore 服务器和 Client 端均使用以下参数。

Config Param Config Value Comment
hive.metastore.service.discovery.mode 服务发现模式 当将其设置为“ zookeeper”时,ZooKeeper 用于远程元存储的动态服务发现。在这种情况下,元存储库在启动时将其自身添加到 ZooKeeper 中,而在其关闭时将其自身删除。默认情况下为空。Client 端和服务器的此参数应具有相同的值。
hive.metastore.uris \ <host_name>:\ ,\ <host_name>:\ ,... 构成 ZooKeeper 集成的 ZooKeeper 服务器的一对或多对主机和端口。当 hive.metastore.service.discovery.mode 设置为“ zookeeper”时使用。否则服务器不会使用该配置。如果所有服务器都使用相同的端口,则可以使用 hive.metastore.zookeeper.client.port 来指定端口,而不是在每个服务器上分别指定它。Client 端和服务器的此参数应具有相同的值。
hive.metastore.zookeeper.client.port <port> 集合中的所有 ZooKeeper 服务器使用相同的端口号时的端口号。Client 端和服务器的此参数应具有相同的值。
hive.metastore.zookeeper.namespace <namespace name> 在其下创建元存储库的所有 ZooKeeper 节点的父节点。
hive.metastore.zookeeper.session.timeout \ ZooKeeperClient 端的会话超时(以毫秒为单位)。如果未在超时时间内发送心跳,则 Client 端将断开连接。
hive.metastore.zookeeper.connection.timeout \ ZooKeeperClient 端的连接超时时间(以秒为单位)。连接超时* hive.metastore.zookeeper.connection.max.retries 以指数退避重试是当策展人 Client 端认为与 Zookeeper 失去连接时。
hive.metastore.zookeeper.connection.max.retries <number> 连接到 ZooKeeper 服务器时可以重试的最大次数。
hive.metastore.zookeeper.connection.basesleeptime \ 使用 ExponentialBackoffRetry 策略连接到 ZooKeeper 服务器时,两次重试之间 await 的初始时间(以毫秒为单位)。

如果您将 MySQL 用作元数据的数据存储,请在启动 Hive Client 或 HiveMetastore Server 之前将 MySQL jdbc 库放入 HIVE_HOME/lib。

要更改元存储库端口,请使用以下hive命令:

hive --service metastore -p <port_num>

Metastore 支持的后端数据库

Database 最低支持版本 参数值的名称 See Also
MySQL 5.6.17 mysql
Postgres 9.1.13 postgres
Oracle 11g oracle hive.metastore.orm.retrieveMapNullsAsEmptyStrings
MS SQL 服务器 2008 R2 mssql

Metastore 架构一致性和升级

Version

在 Hive 0.12.0 中引入。参见HIVE-3764

Hive 现在将模式版本记录在 metastore 数据库中,并验证 metastore 模式版本与要访问该 metastore 的 Hive 二进制文件兼容。请注意,默认情况下会禁用用于隐式创建或更改现有架构的 Hive 属性。 Hive 不会尝试隐式更改 Metastore 模式。当您对旧模式执行 Hive 查询时,它将无法访问元存储。

为了取消模式检查并允许 metastore 隐式修改模式,您需要在hive-site.xml中将配置属性hive.metastore.schema.verification设置为 false。

从版本 0.12 开始,Hive 还包括一个离线模式工具,用于初始化和升级 Metastore 模式。请参阅详细信息here