Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >0885-7.1.6-如何对CDP中的Hive元数据表进行调优

0885-7.1.6-如何对CDP中的Hive元数据表进行调优

作者头像
Fayson
发布于 2022-08-26 09:48:52
发布于 2022-08-26 09:48:52
2.6K03
代码可运行
举报
文章被收录于专栏:Hadoop实操Hadoop实操
运行总次数:3
代码可运行

作者:唐辉

1.文档编写目的

在日常使用中,我们可以发现在hive数据库中的TBL_COL_PRIVS,TBL_PRIVS 、PART_COL_STATS表相当大,部分特殊情况下NOTIFICATION_LOG也可能存在问题,如果集群中有关联的操作时会导致元数据库响应慢,从而影响整个Hive的性能,本文的主要目的通过对Hive 的元数据库部分表进行优化,来保障整个Hive 元数据库性能的稳定性。

  • 测试环境

1.CDP7.1.6 、启用Kerberos

2.元数据版本 MariaDB-5.5.60

2.问题分析

如下图,某生产环境4张表的大小,其中PART_COL_STATS 表超过2000W,TBL_COL_PRIVS 表大小超过3亿,因此存在部分hive 元数据操作性能问题,如表的rename操作慢甚至超时,大批量hive 数据表操作时Hive Metastore Canary时间很长 

2.1.TBL_COL_PRIVS,TBL_PRIVS表数据量过大

TBL_COL_PRIVS,TBL_PRIVS 表过大,它用于记录了每张表每列每个权限信息,从而允许用户直接通过SQL来查询权限信息,当集群中的表数量和权限数量过多时会影响性能,除非表或者权限被清理则会删除这两个表关联的数据,否则这两个表可能会无限制增长。

具体验证如下:

为了快速验证,我们将权限修改后的同步时间修改短一些。通过参数hive.privilege.synchronizer.interval 可以权限变更后的同步间隔时间参数,默认为1800秒,为了快速验证修改为5秒。配置如下

每当我们有表的新建或者表结构变动时以及修改权限都会操作TBL_COL_PRIVS进行变动。如下当我新增一个表时,他的每列每个用户每个权限都会有一条记录,因此这个表会相当的庞大:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--beeline 中执行创建表--
create table testpriv (c1 string ,c2 string);

---元数据库中查看表的TBL_ID,然后关联查询TBL_COL_PRIVSTBL_PRIVS 对于该表生成的数据条数---
select * from TBLS where TBL_NAME='testpriv';
select count(*) from TBL_COL_PRIVS where TBL_ID='12625';
select count(*) from TBL_PRIVS where TBL_ID='12625';

可以查看到TBL_PRIVS中是该表对应的每个用户每个权限一条记录,CDP7.1.6中Ranger默认的All 权限(包括ALTER ,DROP 等)也在内。

TBL_COL_PRIVS该表中的每个列对应的每个用户每个权限一条记录,所以当表或者列以及用户权限策略多时,该表的数据会成倍的增加。

也可以通过给某个用户添加该表的权限来验证:

在Ranger Admin WebUI  中给testuser 添加 testpriv 的update 权限,然后查看TBL_COL_PRIVS和TBL_PRIVS 表验证如下:

下图是TBL_COL_PRIVS,TBL_PRIVS表结构以及关系信息,相比开源的Hive 中,CDP7.1.6 的这两个表中多了AUTHORIZER 字段,它的值通常是

RangerHivePolicyProvider,用于标记生成的权限是来自Ranger中Hive 权限策略

2.2 PART_COL_STATS 表数据量过大

在每个Hive分区表都有写入数据的情况下,通常来说这个表的数据量约为  库*表*分区数*列 。并且每当有分区更新时会写该表或者Hive 启用CBO时会查询该表,如果该表数据量过大,可能会出现超时问题

测试如下:每当有新建表写入数据或者新建分区写入数据以及列改动时都会写入数据到该表

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--hive中执行--
create table testpar (s1 string ,s2 string ) partitioned by (dat string);
insert into testpar values ("aaa","0101","2022-06-22");
insert into testpar values ("bbb","0102","2022-06-23");
create table testpar2 (p1 string ,p2 string ) partitioned by (pdat string);
insert into testpar2 values ("bbb","0103","2022-06-22");
--元数据库中执行--
select * from metastore.PART_COL_STATS limit 10;

PART_COL_STATS 表结构如下:

2.3 NOTIFICATION_LOG 未及时清理

如果在测试环境没有操作的情况下查看该表默认可以看到很多最近该表的记录中有很多关于cloudera_manager_metastore_canary_test_catalog_hive_hivemetastore_xxxx 的操作,这是CM Hive Metastore 操作是否成功的运行状况检查,也就是Hive Metastore Canary 运行状况检查。默认为每5分钟进行一次测试库、表、分区的创建和删除操作,并记录耗时用于Hive Metastore性能检查。如下图表所示,该时间越长表明Hive Metastore 的性能越糟糕。

默认情况下NOTIFICATION_LOG 表中保存的数据为2天,具体控制参数如下:

hive.metastore.event.db.listener.timetolive:2  (单位天)

用于从数据库侦听器队列进行数据清理,每次运行间隔时间操作参数如下:

hive.metastore.event.db.listener.clean.interval:7200   (单位秒)

验证数据写入如下,凡是表、分区的变动都会记录在该表中,impala 的Catalog元数据自动刷新功能也是从该表中读取数据来进行元数据的更新操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--beeline中执行--
create testnotification (n1 string ,n2 string) partitioned by (ndate sting);
insert into testnotification values ("bbb","0102","2022-06-23");

--hive 元数据中执行—
select count(*) from NOTIFICATION_LOG where TBL_NAME='testnotification';
select * from NOTIFICATION_LOG where TBL_NAME='testnotification'  order by EVENT_TIME asc  limit 20;

NOTIFICATION_LOG 表结构如下:

3.解决方式

3.1 禁用权限同步至TBL_COL_PRIVS,TBL_PRIVS

hive.privilege.synchronizer 参数在CDP7.1.6中为true,即每当有权限变动或者表结构时,PrivilegeSynchronizer 将获取 Hive 表上的所有 Ranger 权限并将它们插入到 Hive 后端表TBL_COL_PRIVS以及TBL_PRIVS中(默认同步间隔半小时),这是一项新功能,允许用户通过 SQL 检查 Hive 权限。

设置hive.privilege.synchronizer=false,hive.privilege.synchronizer.interval 参数会失效。它的影响是无法使用beeline较为方便的查询到table/column的权限信息。

配置如下,重启Hiveserver2 并更新配置生效:

注意:如果元数据库中这两个表已经非常大了对性能有影响了,建议做好备份后进行truncate TBL_COL_PRIVS 以及TBL_PRIVS 两个表

3.2 PART_COL_STATS按需统计

如果你的Hive 中不需要启用CBO进行查询优化,那么可以设置如下参数进行禁用:

hive.stats.autogather:false (默认 true ,开启/禁用表、分区级别统计信息收集)

注意:如果PART_COL_STATS表对你当前的集群性能有影响较大了,建议做好备份后进行truncate PART_COL_STATS 。但是这可能会对CBO优化器选择优化方案造成一定影响,后续依然可以通过执行ANALYSE TABLE或者开启autogather在执行INSERT OVERWRITE操作时自动收集表的统计信息。

验证如下:

进行表创建以及分区数据写入,PART_COL_STATS不再更新

重新set hive.stats.autogather=true;  后恢复

3.3 调整notifcation 清理周期

如果NOTIFICATION_LOG 表的最早的EVENT_TIME 时间已经超过了2天+ 默认2个小时间隔时间,那么说明期间的元数据变更事件太多自动清理程序处理不过来导致,如果集群一直比较繁忙,这个数值会累积到很高的情况。该情况下建议手动进行delete 数据操作,详细可以查看文末参考文档[8]。

如果不需要impala 的自动更新元数据操作可以禁用notification,取消勾选并保存重启生效即可

Disable Hive Metastore Canary (Optional) 如果不需要Canary监控信息,可以禁用该选项,可以减少很多事件的产生。

如果有使用impala 的元数据自动更新操作,可以通过调整impala 自动更新元数据的周期减少对NOTIFICATION_LOG表的查询频率来达到调优的目的,代价是impala元数据更新周期会变长。

hms_event_polling_interval_s: 30 (单位:秒,默认2秒,impala元数据更新周期)

也建议通过如下参数进行调优:

hive.metastore.event.db.listener.timetolive: 1  (单位:天,事件生存周期,默认2天)

hive.metastore.event.db.listener.clean.interval: 1800(单位:秒,事件清理间隔周期,默认7200秒)

hive.metastore.event.db.clean.maxevents :  20000 (默认10000,周期清理最大事件数)

调整前的保留时间为7.12日的数据:

date --date='@1657614470'   转化Tue Jul 12 16:27:50 CST 2022

修改配置重启自动后,保留最早的时间只有7.13号的:

date --date='@1657705168'  Wed Jul 13 17:39:28 CST 2022

4.参考文档

通过对如上的元数据表进行调优后,基本可以避免元数据库的性能而导致的问题

TBL_COL_PRIVS,TBL_PRIVS 相关:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[1] https://cwiki.apache.org/confluence/display/Hive/AuthDev[2] https://my.cloudera.com/knowledge/Hive-Metastore-database-table-TBLCOLPRIVS-grows-exponentially?id=281222[3] https://my.cloudera.com/knowledge/Hive-PrivilegeSynchroniser-can-impact-Hive-metastore-RDBMS?id=328065[4] https://my.cloudera.com/knowledge/How-to-change-the-value-of-hiveprivilegesynchronizer-and?id=333414

PART_COL_STATS 相关:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[5] https://cwiki.apache.org/confluence/display/hive/statsdev[6] https://cwiki.apache.org/confluence/display/Hive/Column+Statistics+in+Hive

NOTIFICATIONLOG 相关:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[7] https://my.cloudera.com/knowledge/How-to-speed-up-the-cleanup-process-for-Hive-NOTIFICATIONLOG?id=310681[8] https://my.cloudera.com/knowledge/Cleaning-NOTIFICATIONLOG-table-in-CDP?id=332678[9] https://cwiki.apache.org/confluence/display/Hive/Replication[10] https://cwiki.apache.org/confluence/display/Hive/HCatalog+Notification
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-08-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Hadoop实操 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Hive 元数据表结构详解
元数据是基础,这篇文章值得一读。 本文介绍Hive元数据库中一些重要的表结构及用途,方便Impala、SparkSQL、Hive等组件访问元数据库的理解。 1、存储Hive版本的元数据表(VERSION) 该表比较简单,但很重要。 VER_IDSCHEMA_VERSIONVERSION_COMMENTID主键Hive版本版本说明11.1.0Set by MetaStore 如果该表出现问题,根本进入不了Hive-Cli。比如该表不存在,当启动Hive-Cli时候,就会报错”Table ‘hive.vers
大数据和云计算技术
2018/03/08
5.9K0
MacOS 下hive的安装与配置
之前的文章中我们提到了Hive是Hadoop生态系统中的重要的成员之一,允许用户使用类似SQL的方式,很方便地进行离线数据的统计分析。本节我们就在Hadoop集群的基础上进行Hive的安装与配置。
超哥的杂货铺
2019/12/18
1.4K0
MacOS 下hive的安装与配置
Hive metastore表结构设计分析
  今天总结下,Hive metastore的结构设计。什么是metadata呢,对于它的描述,可以理解为数据的数据,主要是描述数据的属性的信息。它是用来支持如存储位置、历史数据、资源查找、文件记录等功能。元数据算是一种电子式目录。为了达到编制目录的目的,必须在描述并收藏数据的内容或特色,进而达成协助数据检索的目的。
用户3003813
2018/09/06
1.8K0
Hive metastore表结构设计分析
0913-7.7.1-Replication Manager使用优化
在当前CDP的大部分的场景中,PART_COL_STATS和TAB_COL_STATS这两张Hive元数据表都会比较大。因为这两张表是分别存放分区表和非分区表的一些字段上的统计信息,而在CDP中Hive的CBO、Mapjoin和谓词下推等优化查询功能默认是开启的,而这些优化功能又需要基于这些统计信息来做优化,所以在一个已经稳定运行的生产环境中,对应的这两张表可能有非常庞大的数据量(上千万甚至于上亿)。
Fayson
2024/03/05
1950
0913-7.7.1-Replication Manager使用优化
Hadoop基础教程-第11章 Hive:SQL on Hadoop(11.2 Hive安装与配置)(草稿)
该文章是一篇介绍Apache Hive的技术文章,主要介绍了Hive的基本概念、架构设计、数据类型、数据存储、SQL语法、数据导入导出、元数据查询、Hive Web UI的使用、Hive CLI、Hive SQL和Hive Shell等方面的内容。此外,文章还介绍了Hive的生态系统,包括Hive的社区、生态系统、Hive的扩展和插件、Hive的数据安全等方面的内容。
程裕强
2018/01/02
1.9K0
Hadoop基础教程-第11章 Hive:SQL on Hadoop(11.2 Hive安装与配置)(草稿)
Hive的安装与使用-1
1.下载tar包,在客户端窗口上执行 wget -c http://archive.cloudera.com/cdh5/cdh/5/hive-1.1.0-cdh5.7.0.tar.gz 2.解压到app目录下 tar -zxvf hive-1.1.0-cdh5.7.0.tar.gz -C ~/app 3.配置~/.bash_profile export HIVE_HOME=/home/hadoop/app/hive-1.1.0-cdh5.7.0 export PATH=$HIVE_HOME/bin:
sparkle123
2018/04/26
8310
Hive的安装与使用-1
0834-CDP Private Cloud Base 7.1.6正式GA
https://docs.cloudera.com/cdp-private-cloud-base/7.1.6/manager-release-notes/topics/cm-release-notes-731.html
Fayson
2021/04/19
9730
Hive基础学习
假设我们现在建立一张student表,它有两个字段,id(int)和name(string)。
超哥的杂货铺
2019/12/18
6890
Hive基础学习
CDP中的Hive3系列之配置Hive3
升级到 CDP 并迁移旧表后,您可能希望暂时切换到 Hive 旧行为。旧行为可能会解决数据迁移期间脚本的兼容性问题,例如,在运行 ETL 时。
大数据杂货铺
2021/08/20
1.8K0
0816-CDP Hive3升级说明
CDH5中的Hive版本是1.1,而CDP7中的Hive版本为3。Hive3相对Hive1更新特别多,比如支持全新的ACID v2机制,并且底层使用Tez和内存进行查询,相比MR的方式性能提升超过10倍,支持物化视图以及语法使用扩充等等。因为是一次大版本的更新,对于老的CDH5用户升级到CDP7,会需要对于Hive3有足够的了解与准备,才能保证升级成功。本文主要介绍Hive3的新特性,架构,以及语法改造说明。
Fayson
2020/11/03
3.2K1
安装和体验hive-1.2
Hive是种基于Hadoop的数据仓库工具,将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。
程序员欣宸
2021/07/28
5270
安装和体验hive-1.2
hive初始化元数据库乱码
无论是使用何种语言进行编程,碰到的第一个问题莫过于乱码的问题,而使用数据库的时候,也大致差不多。
SRE运维实践
2021/03/04
1.5K0
hive初始化元数据库乱码
CDP中Hive Metastore介绍
Hive Metastore(HMS)是一项单独的服务,不是Hive的一部分,甚至不必位于同一集群上。HMS将元数据存储在Hive、Impala、Spark和其他组件的后端。
大数据杂货铺
2020/10/29
1.9K0
CDP中Hive Metastore介绍
[1130]hive表修复元数据
(tablename是你的表的名字)方法来进行修复元数据。 上面是一层分区的情况执行的。
周小董
2022/04/28
2.4K0
将Hive数据迁移到CDP
使用Replication Manager 将 Hive 数据迁移到 CDP 后,您可能需要执行其他任务。您需要了解 Hive 3.x 和更早版本之间的语义差异。其中一些差异要求您更改 Hive 脚本或工作流程。此外,您需要将使用 CDP 不支持的 Hive CLI 的脚本转换为 Beeline。
大数据杂货铺
2021/10/09
1.3K0
将 Impala 数据迁移到 CDP
在将 Impala 工作负载从 CDH 平台迁移到 CDP 之前,您必须了解 CDH 和 CDP Impala 之间的语义和行为差异以及需要在数据迁移之前执行的活动。
大数据杂货铺
2021/10/20
1.5K0
将 Impala 数据迁移到 CDP
基于Hive进行数仓建设的资源元数据信息统计
在数据仓库建设中,元数据管理是非常重要的环节之一。根据Kimball的数据仓库理论,可以将元数据分为这三类:
大数据学习与分享
2020/08/28
3.5K0
CDP的hive3概述
Cloudera Runtime(CR)服务包括Hive和Hive Metastore。Hive服务基于Apache Hive 3.x(基于SQL的数据仓库系统)。Hive 3.x与以前版本相比的增强功能可以提高查询性能并符合Internet法规。
大数据杂货铺
2020/02/11
3.2K0
CDP的hive3概述
搭建Hive3.x并整合MySQL8.x存储元数据
首先需要准备好Java运行环境和Hadoop环境,Hadoop搭建可以参考如下文章:
端碗吹水
2020/10/27
1.6K0
Apache Hive-2.3.0 快速搭建与使用
Hive 简介 Hive 是一个基于 hadoop 的开源数据仓库工具,用于存储和处理海量结构化数据。它把海量数据存储于 hadoop 文件系统,而不是数据库,但提供了一套类数据库的数据存储和处理机制,并采用 HQL (类 SQL )语言对这些数据进行自动化管理和处理。我们可以把 Hive 中海量结构化数据看成一个个的表,而实际上这些数据是分布式存储在 HDFS 中的。 Hive 经过对语句进行解析和转换,最终生成一系列基于 hadoop 的 map/reduce 任务,通过执行这些任务完成数据处理。 Hi
程序员鹏磊
2018/02/09
1.6K0
Apache Hive-2.3.0 快速搭建与使用
相关推荐
Hive 元数据表结构详解
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验