hive metastore 3.0介绍

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
简介: 我们说到Hive 3.0.0版本开始,其单独提供了standalone metastore服务以作为像presto等处理引擎的元数据管理中心。

基本介绍

数据库、表、函数等 Hive 对象的定义存储在 Metastore 中。 根据系统的配置方式,统计数据和授权记录也可能存储在那里。 Hive 和其他执行引擎在运行时使用此数据来确定如何解析、授权和有效执行用户查询。

Metastore 通过 DataNucleus 将对象定义保存到关系数据库 (RDBMS),DataNucleus 是一个基于 Java JDO 的对象关系映射 (ORM) 层。 有关可以使用的受支持 RDBMS 的列表,请参阅下面的受支持 RDBMS

Metastore 可以配置为嵌入 Apache Derby RDBMS 或连接到外部 RDBMS。 Metastore 本身可以完全嵌入到用户进程中,也可以作为服务运行以供其他进程连接。 下面将依次讨论这些选项中的每一个。

从Hive2迁移到Hive 3

从 Hive 3.0 开始,Metastore 无需安装 Hive 的其余部分即可运行。 它作为单独的版本提供,以便允许非 Hive 系统轻松地与其集成。 (但是,为了方便起见,它仍包含在 Hive 版本中。)使 Metastore 成为独立服务涉及更改许多配置参数名称和工具名称。 所有旧的配置参数和工具仍然有效,以最大限度地向后兼容性。 本文档将涵盖旧名称和新名称。 随着新功能的添加,将不会添加 Hive 样式名称。

有关在没有 Hive 的情况下使用 Metastore 的详细信息,请参阅下面的在没有 Hive 的情况下运行 Metastore

一般配置

Metastore 从文件 metastore-site.xml 读取其配置。 它希望在 $METASTORE_HOME/conf 中找到这个文件,其中 $METASTORE_HOME 是一个环境变量。 为了向后兼容,它还将读取在 HIVE_HOME/conf 中找到的任何 hive-site.xml 或 hive-metastoresite.xml 文件。 也可以在命令行上定义配置选项(请参阅下面的启动和停止服务)。

特定于运行带有各种 RDBMS、嵌入或作为服务且没有 Hive 的 Metastore 的配置值在相关部分中讨论。 以下配置值适用于 Metastore,无论它如何运行。 此表仅涵盖常用的自定义配置值。 对于不太常更改的配置值,请参阅不太常更改的配置参数。

参数 Hive 2参数 默认值 参数说明
metastore.warehouse.dir hive.metastore.warehouse.dir 默认目录和数据库中表的默认位置的 URI。
datanucleus.schema.autoCreateAll datanucleus.schema.autoCreateAll false 如果不存在,则自动在启动时在 RDBMS 中创建必要的模式。 创建一次后将其设置为false。 要启用自动创建还设置 hive.metastore.schema.verification=false。 不建议在生产中自动创建,而是改为运行 schematool。
metastore.schema.verification hive.metastore.schema.verification true 强制 Metastore 架构版本一致性。 设置为 true 时:验证存储在 RDBMS 中的版本信息是否与 Metastore jar 的版本兼容。 还要禁用自动架构迁移。 升级后需要用户手动迁移schema,保证schema的正确迁移。 强烈建议在生产中使用此设置。
设置为 false 时:如果存储在 RDBMS 中的版本信息与 Metastore jar 的版本不匹配并允许自动模式迁移,则发出警告。
metastore.hmshandler.retry.attempts hive.hmshandler.retry.attempts 10 出现连接错误时重试调用 meastore 的次数。
metastore.hmshandler.retry.interval hive.hmshandler.retry.interval 2sec 重试时间间隔
metastore.log4j.file hive.log4j.file none Log4j 配置文件。 如果未设置将在 $METASTORE_HOME/conf 中查找 metastore-log4j2.properties
metastore.stats.autogather hive.stats.autogather true 是否在插入命令期间自动收集基本统计信息。

RDBMS

选择一:内置Derby

Metastore 可以在内置Apache Derby 的情况下运行。 这是默认配置。 但是,它不适用于简单测试之外的用途。 在此配置中,只有一个客户端可以使用 Metastore,并且任何更改都不会在客户端的生命周期之外持久化(因为它使用内存版本的 Derby)。

选择二:外部RDBMS

对于任何持久的多用户安装,应该使用外部 RDBMS 来存储 Metastore 对象。 Metastore 通过 JDBC 连接到外部 RDBMS。 您的 RDBMS 的 JDBC 驱动程序所需的任何 jar 都应放在 METASTORE_HOME/lib 中或在命令行上传递。 需要配置以下值以将 Metastore 连接到 RDBMS。 (注意:这些配置参数在 Hive 2 和 3 之间没有变化。)

配置参数 注释
javax.jdo.option.ConnectionDriverName JDBC driver class
javax.jdo.option.ConnectionPassword Password to connect to the RDBMS with. The Metastore uses Hadoop's CredentialProvider API so this does not have to be stored in clear text in your configuration file.
javax.jdo.option.ConnectionURL Connection URL for the JDBC driver
javax.jdo.option.ConnectionUserName User name to connect to the RDBMS with

支持的RDBMSs

由于 Metastore 使用 DataNucleus 与 RDBMS 进行通信,因此理论上 DataNucleus 支持的任何存储选项都可以与 Metastore 一起使用。 但是,我们只测试并推荐以下内容:

RDBMS Minimum Version javax.jdo.option.ConnectionURL javax.jdo.option.ConnectionDriverName
MariaDB 5.5 jdbc:mysql://:/ org.mariadb.jdbc.Driver
MS SQL Server 2008 R2 jdbc:sqlserver://:;DatabaseName= com.microsoft.sqlserver.jdbc.SQLServerDriver
MySQL 5.6.17 jdbc:mysql://:/ com.mysql.jdbc.Driver
Oracle* 11g jdbc:oracle:thin:@//:/xe oracle.jdbc.OracleDriver
Postgres 9.1.13 jdbc:postgresql://:/ org.postgresql.Driver

= RDBMS所在的机器

= RDBMS JDBC监听的端口

= Metastore存储的数据库(或schema)名称

*显示的 Oracle 值适用于 Oracle 的thin JDBC 客户端。 如果您使用不同的客户端,ConnectionURL 和 ConnectionDriverName 值将不同。

特别注意:使用Postgres时,需要将配置参数metastore.try.direct.sql.ddl(以前是hive.metastore.try.direct.sql.ddl)设置为false,以避免某些操作失败。

安装与升级Metastore Schema

Metastore 提供了 schematool 实用程序来处理 RDBMS 中的 Metastore 模式。 有关选项的完整列表,请参阅该工具的 -help 选项。 下面总结了该工具可以做什么。 在大多数情况下,schematool 可以从 metastore-site.xml 文件中读取配置,但配置也可以作为命令行上的选项传递。

  • -initSchema:安装新schema。 这应该在第一次设置 Metastore 时使用。
  • -upgradeSchema:升级到新安装的版本。 对于 3.0,可以从 1.2、2.0、2.1、2.2 和 2.3 升级到 3.0。 如果需要从 1.2 之前升级,请使用旧版本的 Hive 的 schematool 先将您的 schema 升级到 1.2,然后使用当前的 Metastore 版本升级到 3.0。
  • -createUser:创建 Metastore 用户和schema。 这不会安装表,它只会创建数据库用户和模式。 这在生产环境中可能不起作用,因为您可能没有创建用户和架构的权限。 您可能需要 DBA 为您执行此操作。
  • -validate:检查您的 Metastore schema对于其记录的版本是否正确

运行Metastore

内置模式

Metastore 可以作为库直接嵌入到进程中。 这通常是通过 HiveServer2 完成的,以避免元数据操作的额外网络抖动。 也可以在使用 Hive CLI 或任何其他进程时完成。 此模式是默认模式,将在未设置配置参数 metastore.uris 的任何时候使用。

除了在 HiveServer2 的情况下,使用这种模式会引起一些问题。 首先,拥有许多客户端会给支持的 RDBMS 带来负担,因为每个客户端都有自己的一组连接。 其次,每个客户端都必须具有对 RDBMS 的读/写访问权限。 这使得很难正确保护 RDBMS。 因此,除了 HiveServer2 之外,不建议在生产中使用嵌入式模式。

Metastore Server模式

要将 Metastore 作为服务运行,您必须首先使用 URL 对其进行配置。

Configured On Parameter Hive 2 Parameter Format Default Value Comment
Server metastore.thrift.port hive.metastore.port integer 9083 Port Thrift will listen on.
Client metastore.thrift.uris hive.metastore.uris thrift://:[, thrift://:...] none HOST = hostname, PORT = should be set to match metastore.thrift.port on the server (which defaults to 9083. You can provide multiple servers in a comma separate list.

配置好客户端后,您可以使用 start-metastore 实用程序在服务器上启动 Metastore。 有关可用选项,请参阅该实用程序的 -help 选项。 没有 stop-metastore 脚本。 您必须找到 Metastore 的进程 ID 并终止该进程。

高可用

Metastore 服务是无状态的。 这允许您启动服务的多个实例以提供高可用性。 它还允许您配置一些客户端以嵌入 Metastore(例如 HiveServer2),同时仍为其他客户端运行 Metastore 服务。 如果您正在运行多个 Metastore 服务,您可以将它们的所有 URI 放入客户端的 metastore.thrift.uris 值中,然后将 metastore.thrift.uri.selection (在 Hive 2 hive.metastore.uri.selection 中)设置为 RANDOM 或 SEQUENTIAL。 RANDOM 将导致您的客户端随机选择列表中的服务器之一,而 SEQUENTIAL 将使其从列表的开头开始并尝试按顺序连接到每个服务器。

配置metastore安全

配置kerberos以及SSL

独立运行Metastore而无需Hive

从 Hive 3.0 开始,Metastore 作为单独的包发布,可以在没有 Hive 其余部分的情况下运行。 这称为独立模式。

默认情况下,Metastore 配置为与 Hive 一起使用,因此必须在此配置中更改一些配置参数。

Configuration Parameter Set to for Standalone Mode
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 一起使用:

压缩器(用于 ACID 表)在没有 Hive 的情况下无法运行。 可以读取和写入 ACID 表,但不能压缩它们。
复制尚未在 Hive 之外进行测试。

性能优化

在 Hive 3.0 之前,只有一个 MetaStore API 实现(称为 ObjectStore)。 HIVE-16520 引入了第二个实现,可以将数据库中的对象缓存在内存中。 这可以为往返数据库节省大量时间。 可以通过将参数 metastore.rawstore.impl 更改为 org.apache.hadoop.hive.metastore.cache.CachedStore 来使用它。

当通过此 MetaStore 进行更改时,缓存会自动更新为新数据。 在有多个 MetaStore 服务器的情况下,其中一些服务器的缓存可能已经过时。 为了防止这种情况,CachedStore 会以可配置的频率(默认值:1 分钟)自动刷新缓存。

有关 CachedStore 的所有属性的详细信息可以在配置属性(前缀:metastore.cached)上找到。

较少更改的配置参数

BATCHED_RETRIEVE_, CLIENT_CONNECT_RETRY_DELAY, FILTER_HOOK, SERDES_USING_METASTORE_FOR_SCHEMA, SERVER__THREADS,

THREAD_POOL_SIZE

Security: EXECUTE_SET_UGI, metastore.authorization.storage.checks

Setting up Caching: CACHED, CATALOGS_TO_CACHE & AGGREGATE_STATS_CACHE

Transactions: MAX_OPEN_TXNS, TXNS_*

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
SQL 缓存 分布式计算
SparkSQL与Hive metastore Parquet转换
Spark SQL为了更好的性能,在读写Hive metastore parquet格式的表时,会默认使用自己的Parquet SerDe,而不是采用Hive的SerDe进行序列化和反序列化
SparkSQL与Hive metastore Parquet转换
|
SQL 存储 分布式计算
CDP的Hive3系列之Hive Metastore介绍
CDP的Hive Metastore (HMS) 是一种服务,用于在后端 RDBMS(例如 MySQL 或 PostgreSQL)中存储与 Apache Hive 和其他服务相关的元数据。Impala、Spark、Hive 和其他服务共享元存储。与 HMS 的连接包括 HiveServer、Ranger 和代表 HDFS 的 NameNode。
1905 0
CDP的Hive3系列之Hive Metastore介绍
|
3月前
|
SQL 存储 关系型数据库
|
SQL 分布式计算 Java
浅析 hive udaf 的正确编写方式- 论姿势的重要性-系列四-如何直接访问metastore service(附源码)
浅析 hive udaf 的正确编写方式- 论姿势的重要性-系列四-如何直接访问metastore service(附源码)
|
SQL 运维 大数据
如何获取大数据平台 CDH 中 hive metastore db 的用户名和密码?
如何获取大数据平台 CDH 中 hive metastore db 的用户名和密码?
如何获取大数据平台 CDH 中 hive metastore db 的用户名和密码?
|
SQL 存储 大数据
关于数据仓库的Hive的Hive架构的MetaStore元数据服务
随着大数据技术的不断发展,数据仓库成为了企业中不可或缺的一部分。而Hive作为一种开源的数据仓库系统,因其易于使用和高效处理等特点,成为了许多企业的首选。然而,对于普通用户来说,直接使用Hive的命令行工具进行操作并不方便。因此,开发者社区中涌现出了大量的Hive GUI工具,其中最为流行的就是Web GUI工具。
309 2
|
SQL 存储 分布式计算
Hive 2.1.1 MetaException(在metastore中找不到消息:版本信息)
Hive 2.1.1 MetaException(在metastore中找不到消息:版本信息)
414 0
|
SQL HIVE
解决启动Hive报错Hive Schema version 2.3.0 does not match metastore‘s schema version 1.2.0 Metastore is not
解决启动Hive报错Hive Schema version 2.3.0 does not match metastore‘s schema version 1.2.0 Metastore is not
221 0
|
SQL 分布式计算 数据管理
spark SQL配置连接Hive Metastore 3.1.2
Hive Metastore作为元数据管理中心,支持多种计算引擎的读取操作,例如Flink、Presto、Spark等。本文讲述通过spark SQL配置连接Hive Metastore,并以3.1.2版本为例。
spark SQL配置连接Hive Metastore 3.1.2
|
SQL 分布式计算 Java
spark 对于hive metastore的兼容性随笔--通过classloader实现
spark 对于hive metastore的兼容性随笔--通过classloader实现
486 0