栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Hive MetaStore 3.1.x 元数据管理库表结构介绍及特色功能

Hive MetaStore 3.1.x 元数据管理库表结构介绍及特色功能

本文以hive metastore 3.1.1000中的库表结构进行分析

hive metastore介绍

Hive metastore(HMS)是一项单独的服务,不是Hive的一部分,甚至不必位于同一集群上。
hive metastore 用于管理hive的元数据并提供服务。这里的元数据包括:数据库、表、表的模式、目录、分区、索引以及命名空间等。
为数据库创建的目录一般在hive数据仓库目录下。

在hadoop中的位置

Hive metastore Service (HMS) 将Hive表、分区等的元数据存储在关系数据库中,并通过metastore服务API提供给客户端(包括Hive)访问这些信息

相关的配置

metastore可以存储在JPOX支持的任何数据库中。RDBMS的位置和类型可以由两个变量javax.jdo.option.ConnectionURL和javax.jdo.option.ConnectionDriverName控制。目前支持MySQL、PostgreSQL两种

在hive中,默认情况下新建的数据库以及表都位于HDFS的hive.metastore.warehouse.dir路径下

属性描述默认值
hive.metastore.warehouse.dir指定hive表在hdfs上的存储路径/user/hive/warehouse
javax.jdo.option.ConnectionURL配置元数据的连接URL
javax.jdo.option.ConnectionUserName元数据库连接用户名
javax.jdo.option.ConnectionPassword元数据库连接密码
	 
      hive.metastore.warehouse.dir
      /warehouse/tablespace/managed/hive
    
 	
      javax.jdo.option.ConnectionDriverName
      com.mysql.jdbc.Driver
    
    
    
      javax.jdo.option.ConnectionURL
      jdbc:mysql://bigdata01:3306/metastore
    
    
    
      javax.jdo.option.ConnectionUserName
      metastore
    
如何访问元数据库中的表

首先进入mysql,然后选择使用所创建的元数据库metastore
通过show tables可以看到共用75张表

数据库表结构 database

数据库相关的表详见下图

  • dbs: 数据库的相关信息,存储数据库的名称、存储位置、所属的Catalog
    • DB_ID为其主键,同时也是funcs、db_privs、database_params、tbls的外键。
    • 一般来说,在hive metastore初始化时会自动创建一个名叫default的库,随后通过业务发展以及数据治理等需求,可进行不同业务域库的划分。
  • ctlgs: Catalog的信息,存储Catalog的名称、内部表存储的根目录LOCATION_URL
  • db_privs: 表记录该DB下的权限记录信息。目前的权限管理通常集成开源的类似于sentry、range等成熟的权限框架。
  • database_params: 记录DB的一些扩展信息,便于进行特殊属性的扩展,comment, owner, lastaccesstime, readtime
  • funcs: 存储自定义函数UDF的基本信息,一个UDF只能对应一个库下的表,
  • func_ru: 存储UDF的类型以及执行的路径
table

数据表相关的表详见下图

  • tbls表: 记录了table的一些基本信息,包括表名、类型、创建时间以及SD_ID等信息。
    • TBL_ID是tbls的主键,同时也是table_params、tbl_col_privs、idxs、tbl_privs、partitions、partition_keys、tab_col_stats表的外键。
    • 每个表都对应唯一的DB_ID,取决于你在哪个db下创建的表。在创建内部表写入meta的同时,也会创建相应的物理路径。同时会在sds表中加入DDL时设置的input output、表的location以及SERDE信息
  • tbl_privs、tbl_col_privs: 记录该hive表的表及列权限认证信息。
  • partitions: 记录表的DDL分区的信息
  • partition_keys: 记录表的分区列信息
  • idxs: 表索引信息
  • sds: 存储表的输入、输出格式、存储位置 及SERDE信息
    • 每个SDS对应一个CID(一个CID表示具体的column list信息)
    • 一般的无partition表是一个SDS
    • partition表是一个partition一个SDS
  • columns_v2: 列的基本信息
--查询表信息
select * from from tbls where TBL_NAME = 't2'
--查询数据的输入输出格式、存储位置等信息
select s.* from tbls t,sds s where t.SD_ID=s.SD_ID and t.TBL_NAME = 't2'
--查询表的属性信息
select p.* from tbls t,table_params p where t.TBL_ID=p.TBL_ID and t.TBL_NAME = 't2'
--查询表的分区列
select p.* from tbls t,partition_keys p where t.TBL_ID=p.TBL_ID and t.TBL_NAME = 't2'

Partitions

表分区信息相关的表详见下图

  • partitions: 记录表分区存储的元数据信息。
    • PART_ID为PARTITIONS表的主键,同时也是part_col_stats、part_privs、partition_key_vals 、 partition_params表的外键。
    • partitions表在metastore中是相当重要的表,关系到partition的元数据存取
  • partition_keys: 记录表的分区列信息
  • part_col_privs: 记录该hive表的表及列权限认证信息。
  • part_col_stats: 统计每个分区的基本统计信息,用于优化
  • partition_key_vals: 每个partitions对应的具体值
select p.* from tbls t,`partitions` p where t.TBL_ID=p.TBL_ID and t.TBL_NAME = 't2'

select * from partition_key_vals where PART_ID IN (790,794)

SDS
  • SDS:包含计算引擎运行时需要的input与output 、location路径以及序列化的class信息。
    • SD_ID为该表的主键,同时也是PARTITIONS、BUCKETING_COLS、SKEWD_COL_NAMES、SD_PARAMS、SORT_COLS、SKEWED_VALUES、IDXS的外键
    • 提供table/partition对应的文件系统路径location,以及对这个数据读取的InputFormat、是否压缩、是否是子文件夹存储、SerDe类(对应于SERDES表)
  • SD_PARAMS :为每个SDS的key-value参数
  • SERDES :每个SDS对应的存储的SerDer类,每个SDS记录一个SERDES表的记录
  • SERDE_PARAMS:SERDE的一些参数,主要是行分隔符、列分隔符、NULL字符串等等,可以每个SerDer自己定义
  • columns_v2: 列的基本信息
各表的作用 主要表的作用
表名作用
DBSdatabase信息
DATAbase_PARAMS数据库的相关参数
FUNCS用户注册的函数信息
FUNC_RU用户注册函数的资源信息
TBLS存储Hive表、试图、索引表的基本信息
TABLE_PARAMS表相关信息
TAB_COL_STATS
TBL_COL_PRIVS
TBL_PRIVS
IDXS索引表,存储Hive索引相关的元数据
INDEX_PARAMS索引相关的属性信息
BUCKETING_COLS存储bucket字段信息,通过SD_ID与其他表关联
CDS一个字段CD_ID,与SDS表关联
COLUMNS_V2存储字段信息,通过CD_ID与其他表关联
PARTITIONS分区记录,SD_ID,TBL_ID关联
PARTITION_KEYS存储分区字段,TBL_ID关联
PARTITION_KEY_VALS分区的值,通过PART_ID关联。与PARTITION_KEYS共用INTEGER_IDX来标示不同的分区字段
PARTITION_PARAMS存储某分区相关信息,包括文件数,文件大小,记录条数等PART_ID关联
PART_COL_PRIVS分区字段的权限信息
PART_COL_STATS分区字段的统计信息
PART_PRIVS分区的授权信息
SDS存储对应文件的基本信息,如INPUT_FORMAT、OUTPUT_FORMAT、是否压缩等。TBLS表中的SD_ID与该表关联,可以获取Hive表的存储信息。
SD_PARAMS该表存储Hive存储的属性信息
SORT_COLS排序字段,通过SD_ID关联
SERDES存储序列化反序列化使用的类
SERDE_PARAMS序列化反序列化相关信息,通过SERDE_ID关联
SKEWED_COL_NAMES
SKEWED_COL_VALUE_LOC_MAP
SKEWED_STRING_LIST
SKEWED_STRING_LIST_VALUES
SKEWED_VALUES
GLOBAL_PRIVS存储全局变量
ROLES角色表,和GLOBAL_PRIVS配合
VERSION存储hive的版本信息
SEQUENCE_TABLE存储sqeuence相关信息
分类描述表的作用

特色功能

表的列信息发生变更后,则

  • 变更前的分区的colum定义保持不变,依然可以按照原先的定义读取,
  • 变更后创建的分区采用新的column定义
  • 表的定义引用最新的column定义

create table t1(tid int, tname string, age int);
alter table tl add columns(english int);
insert into t1 values(1,'test',2);
select * from t1 limit 1;


create table t2(id int,name string)partitioned by(gender string)row format delimited fields terminated by ',';
insert into table t2 partition(gender='M') values(1,'zhangsan');
select * from t2 limit 2;

alter table t2 add columns(english int);
insert into table t2 partition(gender='F') values(2,'lisi');
select * from t2 limit 2;

参考

https://cwiki.apache.org/confluence/display/Hive/GettingStarted

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/487359.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号