CDP中的Hive3之Hive Metastore(HMS)

CDP中的Hive3之Hive Metastore(HMS)

1、CDP中的HMS

CDP中的Hive Metastore(HMS)是一种服务,用于在后端RDBMS(例如MySQL或PostgreSQL)中存储与Apache Hive和其他服务相关的元数据。Impala、Spark、Hive和其他服务共享元存储。与HMS的连接包括HiveServer、Ranger和代表HDFS的NameNode

Beeline、Hue、JDBC和Impala shell客户端通过Thrift或JDBC向HiveServer发出请求。HiveServer实例向HMS读/写数据

默认情况下,冗余的HMS以主动/主动模式运行。物理数据驻留在后端RDBMS中,一个用于HMS的RDBMS。所有的HMS实例使用相同的后端数据库。一个单独的RDBMS支持安全服务,例如Ranger。在任何给定时间,所有连接都路由到单一的RDBMS服务。HMS通过Thrift与NameNode对话,并充当HDFS的客户端

HMS直接连接到Ranger和NameNode (HDFS),HiveServer也是如此,但为简单起见,该图中并未显示。后端的一个或多个HMS实例可以与其他服务(例如Ranger)通信

官方文档:https://docs.cloudera.com/cdp-private-cloud-base/latest/hive-hms-overview/topics/hive-hms-introduction.html

2、HMS表的存储(转换)

当运行CREATE TABLE语句或将表迁移到Cloudera Data Platform时,您需要了解HMS如何存储Hive表。语句的成功或失败、结果表类型和表位置取决于许多因素

HMS包含有关您创建的表的以下Hive元数据:

  • 表的定义
  • 列名
  • 数据类型
  • 中央的Schema存储库中的注释

当您在CREATE TABLE语句中使用EXTERNAL关键字时,HMS会将表存储为外部表。当您省略EXTERNAL关键字并创建托管表或摄取托管表时,HMS可能会将表转换为外部表,或者创建表可能会失败,这具体取决于表的属性

影响表转换的一个重要因素是表属性的ACID表类型:

  • 非ACID

    表属性不包含任何设置为true的ACID相关属性。例如,该表不包含这样的属性:transactional=trueinsert_only=true

  • ACID

    表属性确实包含一个或多个设置为true的ACID属性

  • 完全的ACID

    表属性包含transactional=true但不包含insert_only=true

  • 仅插入的ACID

    表属性包含insert_only=true

以下矩阵显示了是否位置属性支持下的表类型:

ACID 托管表 位置属性 注释 行动
非ACID 迁移到CDP(例如从HDP或CDH集群) 表存储为外部表
非ACID 表位置为空(null 存储在外部仓库子目录中的表:metastore.warehouse.external.dir

HMS检测与HMS交互的客户端类型,例如Hive或Spark,并将客户端的能力与表的需求进行比较。HMS根据比较结果执行以下操作:

表要求 客户端符合要求 托管表 ACID表类型 行动
客户端可以写入任何类型的ACID表 ACID 创建表失败
客户端可以写入完全的ACID表 insert_only=true 创建表失败
客户端可以写入仅插入的ACID表 insert_only=true 创建表失败

例如,如果Spark客户端不具备所需的功能,则会出现以下类型的错误消息:

java 复制代码
Spark has no access to table `mytable`. Clients can access this table only if
they have the following capabilities: CONNECTORREAD,HIVEFULLACIDREAD, HIVEFULLACIDWRITE,
HIVEMANAGESTATS, HIVECACHEINVALIDATE, . . .

官方文档:https://docs.cloudera.com/cdp-private-cloud-base/latest/hive-metastore/topics/hive-hms-table-storage.html

3、HWC授权

配置Hive仓库连接器(HWC)的方式会影响查询授权过程和安全性。有多种方法可以通过HWC访问Hive,并不是所有操作都通过HiveServer (HS2)。一些操作,例如Spark Direct Reader和Hive Streaming,通过HMS直接进入Hive,其中通常适用基于存储的权限

作为客户端用户,您必须在使用HWC之前使用kerberos登录。您需要适当的存储权限才能写入目标分区或表位置

您需要配置HWC读取选项。HWC读取配置选项如下表所示:

能力 JDBC方式 Spark Direct Reader模式
Ranger与细粒度访问控制的集成 适用 不适用
Hive ACID读取 适用 适用
处理的工作负载 非生产工作负载、小数据集 生产工作负载,没有细粒度访问控制的ETL

这些读取配置选项需要连接到不同的Hive组件:

  • Direct Reader配置:连接到Hive Metastore(HMS)
  • JDBC配置:连接到HiveServer(HS2)或HiveServer Interactive(HSI)

Ranger授权通过HiveServer(HS2)或Hive Metastore API(HMS API)从Spark访问Hive表

要将ACID托管表从Spark写入Hive,您必须使用HWC。要将外部表从Spark写入Hive,您可以使用原生Spark或HWC

官方文档:https://docs.cloudera.com/cdp-private-cloud-base/latest/hive-metastore/topics/hive_apache_spark_hive_connection_configuration.html

参考文章:https://developer.aliyun.com/article/786098

相关推荐
core5125 天前
Hive实战(三)
数据仓库·hive·hadoop
程序员小羊!6 天前
大数据电商流量分析项目实战:Hive 数据仓库(三)
大数据·数据仓库·hive
core5126 天前
Hive实战(一)
数据仓库·hive·hadoop·架构·实战·配置·场景
智海观潮6 天前
Spark SQL解析查询parquet格式Hive表获取分区字段和查询条件
hive·sql·spark
cxr8287 天前
基于Claude Code的 规范驱动开发(SDD)指南
人工智能·hive·驱动开发·敏捷流程·智能体
core5128 天前
Hive实战(二)
数据仓库·hive·hadoop
Agatha方艺璇8 天前
Hive基础简介
数据仓库·hive·hadoop
像豆芽一样优秀10 天前
Hive和Flink数据倾斜问题
大数据·数据仓库·hive·hadoop·flink
howard200510 天前
VMWare上搭建Hive集群
hive·hadoop
未来之窗软件服务12 天前
Chrome CDP企业自动运营(一) 获取iframe页面内容——东方仙盟
chrome·cdp·仙盟创梦ide·东方仙盟