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。