On this page
AdminManual Metastore 3.0Management
Metastore 3.0Management
Version Note
本文档仅适用于 Hive 3.0 及更高版本中的 Metastore. 对于 Hive 0、1 和 2 版本,请参见Metastore Administration文档。
Introduction
Hive 对象(例如数据库,表和函数)的定义存储在 Metastore 中。根据系统的配置方式,统计信息和授权记录也可以存储在此处。 Hive 和其他执行引擎在运行时使用此数据来确定如何解析,授权和有效执行用户查询。
Metastore 通过DataNucleus将对象定义保存到关系数据库(RDBMS),DataNucleus是基于 Java JDO 的对象关系 Map(ORM)层。请参阅下面的Supported RDBMSs,以获取可以使用的受支持 RDBMS 列表。
可以将 Metastore 配置为嵌入 Apache Derby RDBMS 或连接到外部 RDBMS。 Metastore 本身可以完全嵌入用户进程中,也可以作为服务运行以供其他进程连接。这些选项中的每一个都将在下面依次讨论。
从 Hive 2 更改为 Hive 3
从 Hive 3.0 开始,可以在不安装其余 Hive 的情况下运行 Metastore。它作为单独的发行版提供,以允许非 Hive 系统轻松与其集成。 (但是,为方便起见,它仍包含在 Hive 发行版中.)使 Metastore 成为独立服务涉及更改许多配置参数名称和工具名称。所有旧的配置参数和工具仍然有效,以便最大程度地向后兼容。本文档将涵盖旧名称和新名称。随着旧功能的添加,将不会添加 Hive 样式名称。
有关使用没有 Hive 的 Metastore 的详细信息,请参阅下面的在没有配置单元的情况下运行 Metastore。
General Configuration
元存储从文件metastore-site.xml
读取其配置。它期望在$ METASTORE_HOME/conf
中找到此文件,其中$METASTORE_HOME
是环境变量。为了向后兼容,它还将读取HIVE_HOME/conf
中找到的任何hive-site.xml
或hive-metastoresite.xml
文件。也可以在命令行上定义配置选项(请参见下面的启动和停止服务)。
在相关部分中讨论了特定的配置值,这些配置值用于运行具有各种 RDBMS(嵌入式或作为服务)且没有 Hive 的 Metastore。以下配置值适用于 Metastore,无论其运行方式如何。该表仅涵盖通常定制的配置值。有关不太常更改的配置值,请参见不太常更改的配置参数。
Parameter | Hive2 参数 | Default Value | Description |
---|---|---|---|
metastore.warehouse.dir | hive.metastore.warehouse.dir | 默认目录和数据库中表的默认位置的 URI。 | |
datanucleus.schema.autoCreateAll | datanucleus.schema.autoCreateAll | false | 如果不存在,则在启动时自动在 RDBMS 中创建必要的架构。一次创建后将其设置为 false。要启用自动创建,还可以设置 hive.metastore.schema.verification = false。 不建议在 Producing 自动创建 ;改为运行schematool 。 |
metastore.schema.verification | hive.metastore.schema.verification | true | 强制执行 Metastore 模式版本一致性。设置为 true 时:验证存储在 RDBMS 中的版本信息与 Metastore jar 的版本兼容。还禁用自动模式迁移。要求用户在升级后手动迁移架构,以确保正确的架构迁移。强烈建议在 Producing 使用此设置。 |
设置为 false 时:警告 RDBMS 中存储的版本信息是否与 Metastore jar 的版本不匹配,并允许自动模式迁移。
| | metastore.hmshandler.retry.attempts | hive.hmshandler.retry.attempts | 10 |发生连接错误时重试对 meastore 的呼叫的次数。
|| metastore.hmshandler.retry.interval | hive.hmshandler.retry.interval | 2 秒|重试尝试之间的时间。
| metastore.log4j.file | hive.log4j.file | none | Log4j 配置文件。如果未设置,将在$ METASTORE_HOME/conf |中寻找metastore-log4j2.properties
。
| | metastore.stats.autogather | hive.stats.autogather | true |是否在插入命令期间自动收集基本统计信息。
RDBMS
选项 1:嵌入 derby
Metastore 可以在嵌入Apache Derby的情况下运行。这是默认配置。但是,它不能用于简单测试以外的用途。在此配置中,只有一个 Client 端可以使用 Metastore,并且任何更改都不会超出 Client 端的使用期限(因为它使用内存中的 Derby 版本)。
选项 2:外部 RDBMS
对于任何持久的多用户安装,应使用外部 RDBMS 存储 Metastore 对象。 Metastore 通过 JDBC 连接到外部 RDBMS。 JDBC 驱动程序为 RDBMS 所需的所有 jar 都应放在METASTORE_HOME/lib
或在命令行中传递的明确声明中。需要配置以下值以将元存储连接到 RDBMS。 (注意:这些配置参数在 Hive 2 和 3 之间没有变化.)
Configuration Parameter | Comment |
---|---|
javax.jdo.option.ConnectionURL | JDBC 驱动程序的连接 URL |
javax.jdo.option.ConnectionDriverName | JDBC 驱动程序类 |
javax.jdo.option.ConnectionUserName | 用于连接到 RDBMS 的用户名 |
javax.jdo.option.ConnectionPassword | 用于连接到 RDBMS 的密码。 Metastore 使用Hadoop 的 CredentialProvider API,因此不必以明文形式将其存储在配置文件中。 |
Supported RDBMSs
由于 Metastore 使用 DataNucleus 与 RDBMS 进行通信,因此理论上 DataNucleus 支持的任何存储选项都可以与 Metastore 一起使用。但是,我们仅测试并推荐以下内容:
RDBMS | Minimum Version | javax.jdo.option.ConnectionURL | javax.jdo.option.ConnectionDriverName |
---|---|---|---|
MS SQL 服务器 | 2008 R2 | jdbc:sqlserver://<HOST>:<PORT>;DatabaseName=<SCHEMA> | com.microsoft.sqlserver.jdbc.SQLServerDriver |
MySQL | 5.6.17 | jdbc:mysql://<HOST>:<PORT>/<SCHEMA> | com.mysql.jdbc.Driver |
MariaDB | 5.5 | jdbc:mysql://<HOST>:<PORT>/<SCHEMA> | org.mariadb.jdbc.Driver |
Oracle* | 11g | jdbc:oracle:thin:@//<HOST>:<PORT>/xe | oracle.jdbc.OracleDriver |
Postgres | 9.1.13 | jdbc:postgresql://<HOST>:<PORT>/<SCHEMA> | org.postgresql.Driver |
\ = RDBMS 处于打开状态的主机。
\ = RDBMS 正在侦听 JDBC 连接的端口
\ = Metastore 将表存储在其中的架构(或数据库)。
*显示的 Oracle 值适用于 Oracle 的瘦 JDBCClient 端。如果使用其他 Client 端,则 ConnectionURL 和 ConnectionDriverName 值将不同。
特别注意: 使用 Postgres 时,应将配置参数metastore.try.direct.sql.ddl
(以前是hive.metastore.try.direct.sql.ddl
)设置为 false,以避免某些操作失败。
安装和升级 Metastore 架构
Metastore 提供了schematool
Util,可用于 RDBMS 中的 Metastore 模式。有关选项的完整列表,请参见工具的-help
选项。下面总结了该工具可以做什么。在大多数情况下,schematool
可以从metastore-site.xml
文件读取配置,尽管也可以在命令行中将配置作为选项传递。
-initSchema
:安装新的架构。首次设置 Metastore 时应使用此选项。-upgradeSchema
:升级到新安装的版本。对于 3.0,可以从 1.2、2.0、2.1、2.2 和 2.3 升级到 3.0. 如果需要从 1.2 之前的版本升级,请使用 Hive 的schematool
的较旧版本先将架构升级到 1.2,然后使用当前的 Metastore 版本升级到 3.0.-createUser
:创建 Metastore 用户和架构。这不会安装表,而只是创建数据库用户和架构。这可能在生产环境中不起作用,因为您可能没有创建用户和架构的权限。您可能需要 DBA 为您执行此操作。-validate
:检查您的 Metastore 模式对其记录版本是否正确
运行 Metastore
Embedded Mode
Metastore 可以作为库直接嵌入到流程中。 HiveServer2 经常执行此操作,以避免元数据操作产生额外的网络跃点。使用 Hive CLI 或任何其他过程时,也可以完成此操作。此模式是默认模式,将在未设置配置参数metastore.uris
的任何时候使用。
除了 HiveServer2 的情况外,使用此模式会引起一些问题。首先,拥有许多 Client 端会给支持 RDBMS 带来负担,因为每个 Client 端都有自己的一组连接。其次,每个 Client 端都必须具有对 RDBMS 的读/写访问权限。这使得很难正确保护 RDBMS。因此,除 HiveServer2 外,不建议在 Producing 使用嵌入式模式。
Metastore Server
要将 Metastore 作为服务运行,必须首先使用 URL 配置它。
Configured On | Parameter | Hive2 参数 | Format | Default Value | Comment |
---|---|---|---|---|---|
Client | metastore.thrift.uris | hive.metastore.uris | thrift://<HOST>:<PORT>[, thrift://<HOST>:<PORT>...] | none | HOST =主机名,PORT =应设置为与服务器上的 metastore.thrift.port 匹配(默认为 9083.您可以在逗号分隔的列表中提供多个服务器。 |
Server | metastore.thrift.port | hive.metastore.port | integer | 9083 | Thrift 端口将 continue 监听。 |
一旦配置了 Client 端,就可以使用start-metastore
Util 在服务器上启动 Metastore。有关可用选项,请参见该 Util 的-help
选项。没有 stop-metastore 脚本。您必须找到该 Metastore 的进程 ID,然后终止该进程。
High Availability
Metastore 服务是 Stateless 的。这使您可以启动服务的多个实例以提供高可用性。它还允许您配置一些 Client 端以嵌入 Metastore(例如 HiveServer2),同时仍为其他 Client 端运行 Metastore 服务。如果您正在运行多个 Metastore 服务,则可以将其所有 URI 放入 Client 端的metastore.thrift.uris
值,然后将metastore.thrift.uri.selection
(在 Hive 2 hive.metastore.uri.selection
中)设置为RANDOM
或SEQUENTIAL
。 RANDOM
将导致您的 Client 端随机选择列表中的其中一台服务器,而SEQUENTIAL
将导致其从列表的开头开始并尝试按 Sequences 连接到每个服务器。
保护服务
待办事项:需要填写有关设置 Kerberos,SSL 等的详细信息。
CLIENT_KERBEROS_PRINCIPAL,KERBEROS _ *,SSL *,USE_SSL,USE_THRIFT_SASL
在没有配置单元的情况下运行 Metastore
从 Hive 3.0 开始,Metastore 作为单独的软件包发布,可以在没有 Hive 其余部分的情况下运行。这称为独立模式。
默认情况下,Metastore 配置为与 Hive 一起使用,因此必须在此配置中更改一些配置参数。
Configuration Parameter | 设置为独立模式 |
---|---|
metastore.task.threads.always | org.apache.hadoop.hive.metastore.events.EventCleanerTask,org.apache.hadoop.hive.metastore.MaterializationsCacheCleanerTask |
metastore.expression.proxy | org.apache.hadoop.hive.metastore.DefaultPartitionExpressionProxy |
当前,以下功能尚未经过测试,或已知无法在独立模式下与 Metastore 一起使用:
如果没有 Hive,则无法运行压缩器(用于 ACID 表)。可以读取和写入 ACID 表,但不能对其进行压缩。
复制尚未在 Hive 之外进行过测试。
Performance Optimizations
CachedStore
在 Hive 3.0 之前,只有 MetaStore API 的单个实现(称为ObjectStore
)。 HIVE-16520引入了第二种实现,该实现可以将数据库中的对象缓存在内存中。这样可以节省大量往返数据库的时间。可以通过将参数metastore.rawstore.impl
更改为org.apache.hadoop.hive.metastore.cache.CachedStore
来使用它。
通过此 MetaStore 进行更改时,将使用新数据自动更新缓存。在有多个 MetaStore 服务器的情况下,其中一些缓存可能已过期。为避免这种情况,CachedStore 会以可配置的频率(默认值:1 分钟)自动刷新缓存。
有关 CachedStore 的所有属性的详细信息,可以在Configuration Properties(前缀:metastore.cached
)上找到。
较少更改的配置参数
BATCHED_RETRIEVE _ *,CLIENT_CONNECT_RETRY_DELAY,FILTER_HOOK,SERDES_USING_METASTORE_FOR_SCHEMA,SERVER _ * _ THREADS,
THREAD_POOL_SIZE
安全性:EXECUTE_SET_UGI,metastore.authorization.storage.checks
设置缓存:CACHED *,CATALOGS_TO_CACHE 和 AGGREGATE_STATS_CACHE *
Transaction:MAX_OPEN_TXNS,TXNS_ *