Hive的Metastore三种配置方式分析

来源:互联网 发布:蚁群算法解决指派问题 编辑:程序博客网 时间:2024/05/21 06:36

        Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。而metastore是Hive元数据的集中存放地。metastore元数据存储主要体现在两个方面:服务和后台数据的存储。

      关于Metastore的三种配置:内嵌配置,本地配置,远程配置。

      1. 默认情况下,metastore服务和Hive的服务运行在同一个JVM中,包含了一个内嵌的以本地磁盘作为存储的Derby(Hive自带的数据库)数据库实例。同时,这种配置也被称为内嵌配置。但是这种方式的不好之处就在于每次只有一个内嵌的Derby数据库可以访问某个磁盘上的数据文件,也就是说一次只能为每个metastore打开一个hive会话。如果尝试连接多个,会报错。这样效率很低。

       2.如果要支持多会话,或者多用户的话,需要使用一个独立的数据库(比如mysql),这种配置方式称为本地metastore配置。虽然这种方式Hvie服务和Metastore服务仍然在一个JVM进程中,但连接的却是另外一个进程中运行的数据库,在同一台机器上或者远程机器上。任何JDBC兼容的数据库都可以通过javax.jdo.option.*配置属性来供metastore使用。

       3.还有一种配置时远程metastore配置,这种配置情况下,一个或多个metastore服务器和Hive服务运行在不同的进程中。这样一来,数据库层可以 完全置于防火墙后,客户端则不需要数据库凭证(密码账号),从而提供了更好的可管理性和安全。可以通过hive.metastore.uris设置 为metastore服务器你URI(如果有多个服务器,可以用'逗号'分割),把hive服务设为使用远程metastore.metastore服务器的URI的格式为:thrift://host:port.

      以远程配置的方式演示如下:     

<property>
  <name>javax.jdo.option.ConnectionURL</name>
  <value>jdbc:mysql://192.168.6.77/hive_meta?createDatabaseIfNotExist=true</value>
  <description>JDBC connect string for a JDBC metastore</description>
</property>
 
<property>
  <name>javax.jdo.option.ConnectionDriverName</name>
  <value>com.mysql.jdbc.Driver</value>
  <description>Driver class name for a JDBC metastore</description>
</property>
 
<property>
  <name>javax.jdo.option.ConnectionUserName</name>
  <value>hive</value>
  <description>username to use against metastore database</description>
</property>
 
<property>
  <name>javax.jdo.option.ConnectionPassword</name>
  <value>micmiu</value>
  <description>password to use against metastore database</description>
</property>
<!----hive.metastore.warehouse.dir和logs的文件目录可以自定义配置。----->
注意:需要把mysql的驱动包copy到hive的安装目录下的*/lib 中
            如果是第一次需要执行初始化命令:schematool -dbType mysql -initSchema   
 使用:hive metastore 服务端启动命令:
          hive --service metastore -p <port_num>
        如果不加端口默认启动:hive --service metastore,则默认监听端口是:9083 ,注意客户端中的端口配置需要和启动监听的端口一致。服务端启动正常后,客户端就可以执行hive操作了。

原创粉丝点击