Hive Metastore服务
1、Hive 元数据存储
将元数据存储在关系数据库中(MySql、Derby),元数据包括表的属性、表的名称、表的列、分区及其属性以及表数据所在的目录等。
2、Metastore服务作用
客户端连接metastore服务,metastore再去连接MySQL数据库来存取元数据。有了metastore服务,就可以有多个客户端同时连接,而且这些客户端不需要知道MySQL数据库的用户名和密码,只需要连接metastore 服务即可。
3、Metastore启动方式
下列的本地模式是指Metastore启动连接方式。Hive还有一个本地模式的概念是指Hive任务执行的模式(本地模式、集群模式),这个性能测试模块再做分析,是通过参数hive.exec.mode.local.auto进行配置。
(1)嵌入模式
内嵌模式使用的是内嵌的Derby数据库来存储元数据,也不需要额外起Metastore服务。数据库和Metastore服务都嵌入在主Hive Server进程中。这个是默认的,配置简单,但是一次只能一个客户端连接,适用于用来实验,不适用于生产环境。
解压hive安装包 bin/hive 启动即可使用
缺点:不同路径启动hive,每一个hive拥有一套自己的元数据,无法共享。
(2)本地模式
本地模式采用外部数据库来存储元数据,目前支持的数据库有:MySQL、Postgres、Oracle、MS SQL Server.在这里我们使用MySQL。
本地模式不需要单独起metastore服务,用的是跟hive在同一个进程里的metastore服务。也就是说当你启动一个hive 服务,里面默认会帮我们启动一个metastore线程服务。
hive根据hive.metastore.uris,如果为空,则为本地模式。
缺点是:每启动一次hive服务,都内置启动了一个metastore。
本地模式下hive的配置主需要指定mysql的相关信息即可。
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://node1:3306/hive?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>hive<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>hive</value>
</property>
(3)远程模式
远程模式下,需要单独起metastore服务(hive --service metastore),然后每个客户端都在配置文件里配置连接到该metastore服务。远程模式的metastore服务和hive运行在不同的进程里。
在生产环境中,建议用远程模式来配置Hive Metastore。
在这种情况下,其他依赖hive的软件都可以通过Metastore访问hive。
远程模式下,需要配置hive.metastore.uris 参数来指定metastore服务运行的机器ip和端口,并且需要单独手动启动metastore服务,如有多个metastore服务器,URI之间用逗号分隔。
4、启动方式选择
对于上述的三种启动方式,运行方式如下:
嵌入式Metastore数据库主要用于单元测试。 一次只能有一个进程可以连接到metastore数据库,因此它并不是一个实际的解决方案,但对于单元测试来说效果很好。
本地模式和远程模式的优缺点上,官方文档上没有说各自的优劣。不过远程模式下可以根据需求启动metastore个数和安装节点的位置,实现高可用。
5、元数据表
表名 | 说明 | 天联健 |
DBS | 元数据库信息。存放DB的HDFS路径信息 | DB_ID |
TBLS | 所有hive表的基本信息 | TBL_ID ,SD_ID, DB_ID |
TALE PARAM | 表级属性,如是否外部表,表注释等 | TBL_ID |
COLUMNS_V2 | Hive表字段信息(字段注释,字段名,字段类型,字段序号) | CD_ID |
SDS | 所有hive表、表分区所对应的hdfs数据目录和数据格式 | SD_ID,SERDE_ID |
SERDES | Hive表的序列化类型 | SERDE ID |
SERDE_PARAM | 序列化反序列化信息,如行分隔符、列分隔符、NULL 的表示字符等 |
SERDE_ID |
PARTITIONS | Hive表分区信息 | PART_ID,SD_ID,TEL_ID |
PARTITION_KEYS | Hive分区表分区键 | TBL_ID |
PARTITION_KEY_VALS | Hive表分区名(键值) | PRT_ID |
SEQUENCE_TAELE | 保有Hive对象的下一个可用ID,包括数据库,表。字段, 分区等对象的下一个ID.默认ID每次+5 |
SEQUENCE_NAME,NEXT_VAL |