1. Hive元数据
1.1 Hive元数据的概念级存储方式
Hive中有两类数据:真实数据和元数据。和关系型数据库一一样, 元数据可以看作是描述数据的数据,包括Hive表的数据库名、表名、字段名称与类型、分区字段与类型等。
Hive将元数据存储在RDBMS中,有以下3种模式可以连接到数据库。
Single User Mode:单用户模式,使用内置Derby数据库,也称内嵌Derby模式。
Multi User Mode:多用户模式,使用本地MySQL数据库,也称本地模式。
Remote Server Mode: 远程服务模式,使用远程元数据服务访问数据库,也称远程模式。
按元数据存储位置划分,单用户与多用户模式均属于本地存储,远程服务模式属于远端存储。无论使用哪种模式,Hive客户端均须首先连接metastore服务,然后由metastore服务去访问数据库以完成元数据的存取。
①. Single User Mode
防认情况下. Hive使用Detry内存数据库保存元数果优点是Doby小巧易周安装非常方便。
使用Derty存储方式时,运行Hive Shel会在当前目录生成个drig文件和一个metstor_db目录,用于
保存一些HQL 操作结果。这种存储方式的弊端是:
在同一个目录下同 时刻只能有一个 Hive客户端使用数据库:
切换目录重新启动Hive Shell后,之前保存的元数据将无法被查看,即无法实现元数据共享。
鉴于上述弊端,我们将该模式称为单用户模式,一般在测试环境时使用(用于测试Hive环境)。在该
模式下无须进行特别配置即可使用,但须注意默认的仓库地址( hive.metastore.warehouse.dir)为
“/user/hive/warehouse”。
在单用户模式下Hive服务、metastore服务、Derby 数据库运行在同一进程中。
②. Multi User Mode
将元数据存储介质更换为MySQL,即为多用户模式,这是开发中经常使用的模式。这种模式需要单
独运行一个 MySQL服务,并作如下配置 (需要将MySOL的JDBC 驱动jar文件拷贝到
$HIVE_ HOME/lib 目录下)。
③. Remote Server Mode
本地模式下,每个客户端可启动多个Hive副本,每个Hive都内置一个 metastore服务,这样明显会
浪费资源。所以可单独启动一个metastore 服务,所有客户端使用Thrift协议通过该服务访问元数据
库( 如MySQL),此模式称为远程模式。启动命令如下:
$ hive --service metastore -P 9083
其中“-p”用于指定监听端口,默认端口为9083。
对metastore服务端来说,仍须指定MySQL连接信息以完成对MySQL的访问。检查元数据服务是否
启动成功的命令如下:
$ netstat -anplgrep 9083
9083端口处于正常监听状态即可。
对metastore客户端来说,其无须再配置MySQL连接信息,指定metastore 服务地址即可(主要是在
hive-site.xm中配置hive metastoreuris)。这是一个类似 URL的链接地址,用于通过thrift 前缀连接
metastore. thrift 前缀的格式为: thif:/METASTORE-HOST:PORT,如果有多个metastore服务,须使
用逗号将它们分隔。例如:
<property>
< name> >hive.metastore.uris</name>
<value> thrift://192.168.9.80:9083,thrift://192.168.9.80:9084</value>
</property>
在远程模式下,Hive 服务和metastore服务可以在不同的进程中,也可以在不同的主机中,这样便
可使-者解耦。所以在生产环境中,推荐使用远程模式访问元数据库。
2. 元数据查询
2.1 元数据表
主要的元数据表介绍如下。
VERSION: 存储Hive版本。
DBS、DATABASE PARAMS:存储Hive数据库相关信息。
TBLS、 TABLE PARAMS、TBL PRIVS:存储Hive表相关信息。
SDS、SD PARAMS、SERDES、SERDE_ PARAMS:存储Hive文件存储相关信息。
PARTITIONS、PARTITION KEYS、PARTITION KEY_ VALS、PRTITION_PARAMS:存储分区相
关信息。
COLUMNS_ V2:存储表对应的字段信息。
其他不常用的元数据表介绍如下。
CDS: 记录COLUMN V2中的所有CD_ ID。
DB_ PRIVS: 数据库权限信息表。
IDXS: 索引表。
INDEX PARAMS:索引相关属性信息。
TBL_ COL_ STATS:表字段统计信息。
TBL COL PRIVS: 表字段授权信息。
PART PRIVS:分区授权信息。
PART COL PRIVS:分区字段授权信息。
PART COL STATS:分区字段的统计信息。
FUNCS:用户注册函数。
FUNC RU;用户注册函数的资源信息。
2.2 数据库元数据
(1) DBS:
DBS表存储Hive中所有数据库的基本信息。元数据表DBS字段说明如表3-2所示。
(2) DATABASE PARAMS:
DATABASE PARAMS表存储数据库的相关参数,这些参数是在创建表时由“CREATE DATABASE..的子句“WITH DBPROPERTIES(property name=property_value...)”指定的。例如:
create dabase testdb with dbproperties'('createdby'-'hive')
其中,DBS和元数据表DATABASE PARAMS通过DB ID字段关联。
2.3 表元数据
TBLS、TABLE PARAMS和TBL PRIVS表通过TBL ID进行关联。
(1) TBLS:
元数据表TBLS中存储Hive表的基本信息,包括内部表、外部表、索引表与视图。
(2) TABLE PARAMS:
TABLE PARAMS表存储表视图的额外属性信息,由建表语句的子句“
TBL PROPERTIES(property_ name= property_ val)”指定。
(3) TBL PRIVS:
TBL PRIVS表存储表/视图的授权信息。
2.4 表数据存储元数据
创建Hive表时可以指定各种文件的格式。Hive 将HQL解析成MapReduce时,须知道去哪里、使用
哪种格式读写HDFS文件,而这些信息就保存在这几张表中。
(1) SDS:
SDS表保存文件存储的基本信息,如INPUT FORMAT、OUTPUT FORMAT、是否压缩等。TBLS
表中的SD_ ID与该表关亥表关联,可以通过SD _ID获取该表中保存的存储信息。
(2) SD_ PARAMS:
SD_ PARAMS表存储Hive存储的额外属性信息,其详细结构如表3-8所示
(3) SERDES:
SERDES表存储序列化使用的类信息,在创建表时由子句
“ROW FORMAT SERDE'org. apache hadoop hive. sede.axzy.LazySimpleSerdle”指定。
(4) SERDE PARAMS:
SERDB PARAMS表存储序列化的属性和格式信息,如行、列分隔符等,这些信息会在创建表时由
“ROW FORMAT SERDE '……' WITHSERDEPROPERTIES(propertyname propery val)" 指定。
2.5 表分区元数据
存储表分区相关信息的元数据表主要有PARTITIONS、 PARTITION KEYS、
PARTITION KEY _VALS和PARTITION PARAMS。
(1) PARTITIONS:
PARTITIONS表存储表分区的基本信息。
(2) PARTITION KEYS:
PARTITION_ KEYS表存储分区的字段信息。
(3) PARTITION KEY_ VALS:
PARTITION_ KEY _VALS表存储分区字段值。
(4) PARTITION_ PARAMS:
PARTITION PARAMS表存储分区的属性信息。
2.6 表字段元数据
COLUMNS_ V2表存储表对应的字段信息。