目录
一、元数据的概念
二、元数据存储方式
一、元数据的概念
Hive中有两类数据:真实数据和元数据。和关系型数据库一样,元数据可以看作是描述数据的数据,包括Hive表的数据库名、表名、字段名称与类型、分区字段与类型等。
二、元数据存储方式
Hive 将元数据存储在RDBMS中,有以下3种模式可以连接到数据库。
- Single User Mode:单用户模式,使用内置Derby 数据库,也称内嵌Derby模式。
- Multi User Mode:多用户模式,使用本地MySQL数据库,也称本地模式。
- Remote Server Mode:远程服务模式,使用远程元数据服务访问数据库,也称远程模式。
按元数据存储位置划分,单用户与多用户模式均属于本地存储,远程服务模式属于远端存储。无论使用哪种模式,Hive客户端均须首先连接metastore服务,然后由metastore服务去访问数据库以完成元数据的存取。
2.1 Single User Mode
默认情况下,Hive使用Derby内存数据库保存元数据,优点是Derby小巧易用,冬。
装非常方便。
使用Derby存储方式时,运行Hive Shell会在当前目录生成一个derby.log 文件和一个metastore_db目录,用于保存一些HQL操作结果。这种存储方式的弊端是:
- 在同一个目录下同一时刻只能有一个Hive客户端使用数据库;
- 切换目录重新启动Hive Shell后,之前保存的元数据将无法被查看,即无法实现元数据共享。
鉴于上述弊端,我们将该模式称为单用户模式,一般在测试环境时使用(用于测试Hive 环境)。在该模式下无须进行特别配置即可使用,但须注意默认的仓库地址(hive.metastore.warehouse.dir)为“/user/hive/warehouse”。
在单用户模式下Hive服务、metastore服务、Derby 数据库运行在同一进程中。
2.2 Multi User Mode
将元数据存储介质更换为MySQL,即为多用户模式,这是开发中经常使用的模式。这种模式需要单独运行一个MySQL 服务,并作如下配置(需要将MySQL的JDBC驱动jar文件拷贝到SHIVE_HOME/Iib目录下)。
(1)配置MySQL
在MySQL中配置对应的Hive用户,例如,使用以下命令创建“hive”用户并授予权限。
create user`'hive'@"%'identified by 'hive';
grant all privileges on *.* to'hive'@'%'with grant option;
flush privileges;
通过以下命令可以查看MySQL的所有用户情况。
SELECT host,user,password FROM mysql.user;
(2)修改hive-site.xml
关键代码:
<!一元数据存储配置-->
<property>
<value>jdbc:mysql://MYSQL-HOST:3306/hive?createDatabaseIfNotEx</property>
<name>javax.jdo.option.ConnectionURL</name>
<property>
<property> <name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<!--Hive 连接MySQL的用户名和密码,用于访问元数据->
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>hive</value>
</property>
该模式除了须使用MySQL 作为元数据存储介质,它的其他特性和单用户模式相同。Hive 服务、metastore服务运行在同一进程中,而MySQL服务运行在单独的进程中。该进程既可以在当前Hive主机中运行,也可以在其他远程主机中运行。多用户模式如图3.2所示。这种模式可以在不同主机上运行多个Hive(作为MySQL客户端)并同时连接到MySQL,一般在团队内部使用,要求每个客户端都有自己的MySQL用户名和密码。
2.3 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.xml中配置hive.metastore.uris)。这是一个类似 URL的链接地址,用于通过thrift 前级连接metastorethritt 前缀的格式为:thrif:/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 服务可以在不同的进程中,也可以在不同的主机中,这样便可使二者解耦。所以在生产环境中,推荐使用远程模式访问元数据库。