Hive元数据管理

众所周知,hive表中的数据是HDFS上的文件,可是hive怎么知道这些文件的内容都对应哪个字段,对应哪个分区呢?

就是hive的元数据管理着这一切。通常在hive-site.xml中的元数据库配置成MySQL,替换Derby。

<property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>root</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>root</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql:///metastore?createDatabaseIfNotExists=true</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.jdbc.Driver</value>
    </property>

下面我们进MySQL看看元数据的表具体有哪些。

1.VERSION

这个存hive版本,有且仅有一条数据

如果多了,会报错

Caused by: MetaException(message:Metastore contains multiple versions (2)

2.库相关表

DBS是数据库主表,字段名顾名思义,样例数据如下

DATABASE_PARAMS是创建数据库 WITH DBPROPERTIES (property_name=property_value, …)指定的参数

FUNCS是函数表

FUNC_RU是函数在哪个jar包中

3.表相关表

PS:调整里半天位置来截个图,感觉像站队合影一样……哈哈

TBLS是表的主表,存放hive所有表的主要信息,其中 TBL_TYPE 是表类型, MANAGED_TABLE 表示内部表, EXTERNAL_TABLE 表示外部表

TABLE_PARAMS是表参数,类似DATABASE_PARAMS

TBL_PRIVS,TBL_COL_PRIVS分别是表权限与列权限

PARTITION_KEYS是分区信息表, INTEGER_IDX 是分区字段序号

PARTITIONS是具体的分区记录,当某表添加新的分区时,会增加一条记录

4.存储相关表

SDS是存储主表,包含数据文件的输入输出格式,所在HDFS路径,是否压缩等

COLUMNS_V2是列的信息,INTEGER_IDX是列的下标,对应文件的内容顺序

SD_PARAMS是在创建表时候使用STORED BY ‘storage.handler.class.name’ [WITH SERDEPROPERTIES (…)指定

SERDES是序列化使用类的表

SERDE_PARAMS存储列分隔符,行分隔符等

在序列化参数表中记录列的分隔符,意味着Hive的存储是对每个字段各自序列化的。

我来评几句
登录后评论

已发表评论数()

相关站点

热门文章