php自己写框架做网站,wordpress搭建下载站,如何免费建设公司网站,网上商城程序如何获取特定 HIVE 库的元数据信息如其所有分区表和所有分区
1. 问题背景
有时我们需要获取特定 HIVE 库下所有分区表#xff0c;或者所有分区表的所有分区#xff0c;以便执行进一步的操作#xff0c;比如通过 使用 HIVE 命令 MSCK REPAIR TABLE table_name sync partiti…如何获取特定 HIVE 库的元数据信息如其所有分区表和所有分区
1. 问题背景
有时我们需要获取特定 HIVE 库下所有分区表或者所有分区表的所有分区以便执行进一步的操作比如通过 使用 HIVE 命令 MSCK REPAIR TABLE table_name sync partitions 修复 HIVE 元数据与 HDFS 数据在分区上的不一致性。 怎么获取这些 hms 元数据呢
2. 获取 HMS 元数据的方案概述
获取 HMS 元数据大体有以下几种方案
2.1 执行 hive sql 命令并基于 hive sql 的返回结果解析获取 hms元数据
相关的 hive sql 命令有:
show databases;
show tables;
show tables like table_name_regexp;
show create table xxx;
DESCRIBE DATABASE EXTENDED db_name;
DESCRIBE EXTENDED|FORMATTED db_name.table_name;
DESCRIBE EXTENDED|FORMATTED db_name.table_name PARTITION partition_spec;2.2 查询 hive 库对应的 hdfs 目录的结构信息并基于这些结构信息解析获取 hms 元数据
hdfs 目录的结构信息包括子目录和文件名等信息解析这些信息可以获取 HIVE 库名表名分区名分区值等 hms 元数据信息。比如如果某个库中所有分区表的分区字段名都是 part_date 且分区值都是8位数字如20230101则可以通过如下 hdfs 命令结合 awk 命令解析获取该hive库下所有分区表的表名
hdfs dfs -ls -R hdfs:///user/hundsun/dap/hive | egrep part_date[0-9]{8}$ |awk -F / BEGIN { OFS. ;}{print $8,$9} | uniq 2.3 直接访问 hms 底层的 rdbms 数据库并执行sql查询获取 hms 元数据
hms 底层的元数据信息都是保存在 rdbms s数据库如mysql中的所以我们也可以直接访问 hms 底层的 rdbms 数据库并执行sql查询获取 hms 元数据访问 hms 数据库并执行sql以获取指定 HIVE 库下所有分区表或指定HIVE库下所有分区表的所有分区其示例命令如下
# 获取指定HIVE库下所有分区表-访问 hms 数据库并执行sql:
select distinct d.NAME,t.TBL_NAME
from tbls t join dbs d join partitions p
on t.DB_IDd.DB_ID and t.TBL_IDp.TBL_ID
where d.name in (hs_sr,hs_ods,hs_mid);
# 获取指定HIVE库下所有分区表的所有分区-访问 hms 数据库并执行sql:
select d.NAME,t.TBL_NAME,p.PART_NAME
from tbls t join dbs d join partitions p
on t.DB_IDd.DB_ID and t.TBL_IDp.TBL_ID
where d.name in (hs_sr,hs_ods,hs_mid);3 hms 元数据库的相关信息
在 hms 元数据服务底层的 hms 元数据库中保存了 hive 库/表/分区等相关元数据信息hms 元数据库的 url/数据库名/用户名/密码等信息可以咨询集群管理员获取其中数据库名一般默认是hive,用户名一般默认也是hive在 cdh/cdp大数据平台中,也可以使用如下 curl 命令访问 CM API 获取: curl -u admin_uname:admin_pass “http://cm_server_host:7180/api/v19/cm/deployment”该命令中的 admin_uname:admin_pass 是 cm 管理员的用户名和密码其默认值可以在 CM server 节点的配置文件 /etc/cloudera-scm-server/db.properties 中获取当 cm 和 hms 使用同一个 rdbms 数据库实例时有时 cm 管理员也可以直接查询 hms 的元数据库 hive hms 元数据库 rdmbs中一些核心关键的表有 dbs,tbls,PARTITIONS,SDS 等,其相关信息如下
- table dbs stores the information of hive databases;
- table TBLS stores the information of Hive tables
- table PARTITIONS stores the information of Hive table partitions
- table SDS stores the information of storage location, input and output formats, SERDE etc
- table hive.dbs has below important columns:DB_ID,NAME,DB_LOCATION_URI
- tablet hive.bls has below important column:TBL_ID,DB_ID,SD_ID,TBL_NAME
- table hive.partitions has below important column:PART_ID,PART_NAME,SD_ID,TBL_ID
- table hive.sds has below important column:SD_ID,LOCATION
- Both table TBLS and PARTITIONS have a foreign key referencing to SDS(SD_ID);