apache-hive / 3.1.1 / reference / AdminManual_Metastore_3.0_Administration.html

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.xmlhive-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 提供了schematoolUtil,可用于 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-metastoreUtil 在服务器上启动 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中)设置为RANDOMSEQUENTIALRANDOM将导致您的 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_ *