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 ParameterDescription
javax.jdo.option.ConnectionURL包含元数据的数据存储的 JDBC 连接字符串
javax.jdo.option.ConnectionDriverName包含元数据的数据存储的 JDBC 驱动程序类名称
hive.metastore.urisHive 连接到这些 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 ParameterDescriptionDefault 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.threadsThrift 服务器池中的最小工作线程数。
(配置单元 0.6 和更高版本.)
200
hive.metastore.server.max.threadsThrift 服务器池中的最大工作线程数。
(Hive 0.6 及更高版本.)
100000,因为 Hive 0.8.1
hive.metastore.filter.hookMetastore 钩子类,用于进一步过滤 Client 端上的元数据读取结果。
(Hive 1.1.0及更高版本。)
org.apache.hadoop.hive.metastore.DefaultMetaStoreFilterHookImpl
hive.metastore.portHive 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 ParamConfig ValueComment
javax.jdo.option.ConnectionURLjdbc:derby:;databaseName= ../build/test/junit_metastore_db;create=true位于 Hive/树干/内部的 Derby 数据库...
javax.jdo.option.ConnectionDriverNameorg.apache.derby.jdbc.EmbeddedDriverDerby 嵌入了 JDBC 驱动程序类。
hive.metastore.warehouse.dirfile://${user.dir}/../build/ql/test/data/warehouse单元测试数据进入本地文件系统中的此处。

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

远程 Metastore 数据库

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

Config ParamConfig ValueComment
javax.jdo.option.ConnectionURLjdbc:mysql://<host name>/<database name>?createDatabaseIfNotExist=true元数据存储在 MySQL 服务器中
javax.jdo.option.ConnectionDriverNamecom.mysql.jdbc.DriverMySQL 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 ParamConfig ValueComment
hive.metastore.uris不需要,因为这是本地 Store
hive.metastore.localtrue这是本地 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 ParamConfig ValueComment
javax.jdo.option.ConnectionURLjdbc:mysql://<host name>/<database name>?createDatabaseIfNotExist=true元数据存储在 MySQL 服务器中
javax.jdo.option.ConnectionDriverNamecom.mysql.jdbc.DriverMySQL 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 ParamConfig ValueComment
hive.metastore.uristhrift://<host_name>:<port>Thrift Metastore 服务器的主机和端口。如果指定了 hive.metastore.thrift.bind.host,则 host 应该与该配置相同。在动态服务发现配置参数中了解有关此内容的更多信息。
hive.metastore.localfalseMetastore 是远程的。注意:从 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 ParamConfig ValueComment
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
MySQL5.6.17mysql
Postgres9.1.13postgres
Oracle11goraclehive.metastore.orm.retrieveMapNullsAsEmptyStrings
MS SQL 服务器2008 R2mssql

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