目录

一、元数据的概念

二、元数据存储方式


一、元数据的概念

        Hive中有两类数据:真实数据和元数据。和关系型数据库一样,元数据可以看作是描述数据的数据,包括Hive表的数据库名、表名、字段名称与类型、分区字段与类型等。

二、元数据存储方式

Hive 将元数据存储在RDBMS中,有以下3种模式可以连接到数据库。

  1. Single User Mode:单用户模式,使用内置Derby 数据库,也称内嵌Derby模式。
  2. Multi User Mode:多用户模式,使用本地MySQL数据库,也称本地模式。
  3. 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 服务可以在不同的进程中,也可以在不同的主机中,这样便可使二者解耦。所以在生产环境中,推荐使用远程模式访问元数据库。