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

相关推荐
weixin_3077791310 小时前
使用C#实现从Hive的CREATE TABLE语句中提取分区字段名和数据类型
开发语言·数据仓库·hive·c#
一个天蝎座 白勺 程序猿12 小时前
大数据(4.6)Hive执行引擎选型终极指南:MapReduce/Tez/Spark性能实测×万亿级数据资源配置公式
大数据·hive·mapreduce
一个天蝎座 白勺 程序猿1 天前
大数据(4.5)Hive聚合函数深度解析:从基础统计到多维聚合的12个生产级技巧
大数据·hive·hadoop
weixin_307779131 天前
C#实现HiveQL建表语句中特殊数据类型的包裹
开发语言·数据仓库·hive·c#
一个天蝎座 白勺 程序猿2 天前
大数据(4.2)Hive核心操作实战指南:表创建、数据加载与分区/分桶设计深度解析
大数据·hive·hadoop
一个天蝎座 白勺 程序猿2 天前
大数据(4.3)Hive基础查询完全指南:从SELECT到复杂查询的10大核心技巧
数据仓库·hive·hadoop
weixin_307779132 天前
判断HiveQL语句为建表语句的识别函数
开发语言·数据仓库·hive·c#
酷爱码2 天前
hive相关面试题以及答案
hive·分布式
珹洺3 天前
Java-servlet(十)使用过滤器,请求调度程序和Servlet线程(附带图谱表格更好对比理解)
java·开发语言·前端·hive·hadoop·servlet·html
shouwangV63 天前
hive执行CTAS报错“Hive Runtime Error while processing row”
数据仓库·hive·hadoop