On this page
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中进行了描述。另请参见《语言手册》的配置单元配置属性,包括Metastore和Hive 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 参数的用户友好说明,请参见《语言手册》 配置单元配置属性的Metastore和Hive 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。