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元数据:
HMS检测用于与HMS进行交互的客户端类型,例如Hive或Spark,并将客户端的功能与表要求进行比较。HMS根据比较结果执行以下操作:
例如,如果Spark客户端不具备所需的功能,则会出现以下类型的错误消息:
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中:
![98f73461369164e0eb85fcce50812edc.png](https://i-blog.csdnimg.cn/blog_migrate/9f6539972f44e0077f62890a76a57e48.png)
• 表定义
• 列名
• 数据类型
• 集中的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 |
表要求 | 客户符合要求 | 托管表 | ACID表类型 | 行动 | |
客户端可以写入任何类型的ACID表 | 没有 | 是 | 是 | 创建表失败 | |
客户端可以写入完整的ACID表 | 没有 | 是 | insert_only = true | 创建表失败 | |
客户端可以写入仅插入的ACID表 | 没有 | 是 | insert_only = true | 创建表失败 |
Spark has no access to table `mytable`. Clients can access this table only ifthey 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高级配置代码段(安全阀)中,单击
+。
![d81e5051feb598cda24689b07778c884.png](https://i-blog.csdnimg.cn/blog_migrate/c5a7deb825efc04351e598f13e9f5b44.png)
[mysqld] datadir=/var/lib/mysql max_connections=8192 . . .
MariaDB:例如,在/etc/systemd/system/mariadb.service.d/limits.conf中:
[Service] LimitNOFILE=24000 . . .
使用默认的
thrift
属性(
8K
):
hive.server2.async.exec.threads 8192hive.server2.async.exec.wait.queue.size 8192hive.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