CDP中Hive Metastore介绍

2020-10-29 10:14:32 浏览数 (1)

Hive Metastore概述

Hive Metastore(HMS)是一项单独的服务,不是Hive的一部分,甚至不必位于同一集群上。HMS将元数据存储在Hive、Impala、Spark和其他组件的后端。

Beeline、Hue、JDBC和Impala Shell客户端通过thrift或JDBC向HiveServer发出请求。冗余的HiveServer是被动的,可提供故障转移服务。HiveServer实例将数据读取/写入HMS。后端的一个或多个HMS实例可以与其他服务(例如Ranger)对话。冗余HMS是被动的,可提供故障转移服务。物理数据驻留在后端RDBMS中,一个用于HMS,一个用于安全服务,例如Ranger。在任何给定时间,所有连接都会路由到单个RDBMS服务。HMS通过thrift与NameNode进行对话,并充当HDFS的客户端。

HMS表存储

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

HMS表转换

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

• 表定义

• 列名

• 数据类型

• 集中的Schema存储库中的注释

在CREATE TABLE语句中使用EXTERNAL关键字时,HMS将表存储为外部表。当您省略EXTERNAL关键字并创建托管表或从托管表摄取数据时,HMS可能会将表转换为外部表,否则表创建可能失败,具体取决于表属性。影响表转换的重要表属性是ACID或Non-ACID表类型:

非ACID

表属性不包含任何设置为true的与ACID相关的属性。例如,该表不包含此类属性transactional = true或insert_only = true

ACID

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

Full-ACID

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

仅插入的ACID

表属性包含insert_only = true。

以下矩阵显示了表类型以及是否支持location属性。

ACID

受管

位置属性

注释

行动

非ACID

迁移到CDP,例如从HDP或CDH集群。

表存储为外部

非ACID,ACID,完整ACID,仅插入ACID

没有

表位置为空

表存储在子目录中 metastore.warehouse.external.dir

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

表要求

客户符合要求

托管表

ACID表类型

行动

客户端可以写入任何类型的ACID表

没有

创建表失败

客户端可以写入完整的ACID表

没有

insert_only = true

创建表失败

客户端可以写入仅插入的ACID表

没有

insert_only = true

创建表失败

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

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

配置HMS属性以进行授权

作为管理员,如果您对查询授权有任何疑问,则可能需要通过Ranger设置Apache Hive Metastore(HMS)授权。例如,如果您配置了Hive查询的基于存储的授权,然后又想通过Ranger切换到授权,则必须配置HMS属性。

要集成HMS API和Ranger以授权查询,您需要使用Cloudera Manager将以下HMS属性和值添加到hive-site.xml中:

hive.metastore.pre.event.listeners的值为:org.apache.hadoop.hive.ql.security.authorization.plugin.metastore.HiveMetaStoreAuthorizer

配置HMS写入。

hive.security.authenticator.manager的值为:org.apache.hadoop.hive.ql.security.SessionStateUserAuthenticator

使用Cloudera Manager安全阀将属性添加到hive-site.xml。

1) 在Cloudera Manager中,要配置Hive Metastore属性,请单击集群> Hive-1 >配置。

2) 搜索Hive-site。

在hive-site.xml的Hive Metastore Server高级配置代码段(安全阀)中,单击

3) 添加属性名称和值。

4) 重复步骤以添加其他属性。

5) 保存更改。

过滤HMS结果

编写用于从Hive筛选数据的API后,您需要知道如何设置、启用和禁用API。您需要使用Cloudera Manager在hive-site.xml的安全阀中添加一些Hive Metastore(HMS)属性 。

HMS可以对读取操作返回的数据执行服务器端过滤。默认情况下启用筛选,该筛选根据用户身份显示语句的结果,例如SHOW TABLES或SHOW DATABASES。您可以通过设置布尔标志和挂钩来禁用过滤。该钩子标识实现过滤的类名。您在hive-site.xml中为HMS API-Ranger集成添加了以下属性和值 :

metastore.server.filter.enabled值:true(进行过滤)或false(不进行过滤)

metastore.filter.hook值:org.apache.hadoop.hive.ql.security.authorization.plugin.metastore.HiveMetaStoreAuthorizer

如上一节所述添加属性。

设置Metastore数据库

如果您具有本地集群,则需要知道如何为Hive Metastore(HMS)设置后端数据库。设置包括安装受支持的数据库、配置属性、指定metastore位置以及可选的连接参数。

在CDP私有云基础中,您需要为Hive Metastore(HMS)安装受支持的数据库以存储元数据。您可以通过修改配置Hive Metastore到hive-site.xml 。您可以使用Cloudera Manager安全阀功能,而不要 hive set key=value在命令行上使用。

调优Metastore

通常,您需要限制与Hive Metastore的并发连接。随着打开的连接数量的增加,延迟也会增加。后端数据库问题,Hive使用不当(例如极其复杂的查询,连接泄漏)和其他因素可能会影响性能。

CDP私有云基础中的常规Metastore调优

尝试进行以下更改以调整HMS性能:

• 购买SSD用于一个或多个HMS。

• Cloudera建议单个查询访问不超过10,000个表分区。如果查询的表进行了联接,请计算跨所有表访问的合并分区数。

• 调整后端(RDBMS)。HiveServer连接到HMS,只有HMS连接到RDBMS。后端花费的时间越长,HMS需要更多的内存来响应相同的请求。限制后端数据库中的连接数。

MySQL:例如,在/etc/my.cnf中:

代码语言:javascript复制
[mysqld]
       datadir=/var/lib/mysql
       max_connections=8192
       . . .

MariaDB:例如,在/etc/systemd/system/mariadb.service.d/limits.conf中:

代码语言:javascript复制
[Service]
       LimitNOFILE=24000
       . . .

使用默认的thrift属性(8K):

代码语言:javascript复制
hive.server2.async.exec.threads 8192
hive.server2.async.exec.wait.queue.size 8192
hive.server2.thrift.max.worker.threads 8192

为您的应用程序设置datanucleus.connectionPool.maxPoolSize。例如,如果poolSize = 100,具有3个HMS实例(一个专门用于压缩),并且每个服务器具有4个池,则可以容纳1200个连接。

来源:https://docs.cloudera.com/cdp-private-cloud-base/7.1.3/hive-hms-overview/topics/hive-hms-introduction.html

https://docs.cloudera.com/cdp-private-cloud-base/7.1.3/hive-metastore/topics/hive-hms-table-storage.html

0 人点赞