HIVE之-------metastore

Posted 女菜鸟成长记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HIVE之-------metastore相关的知识,希望对你有一定的参考价值。

1、名词解释:

  1. metastore:元数据集仓库,是Hive元数据的集中存放地,包括两个部分:服务和后台数据存储

  2. URI:uniform resource identifier ,是一个用于标识某一互联网资源名称的字符串,该标识允许用户对任意(包括本地和互联网)的资源通过特定的协议进行交互操作

  3. JDBC:Java Database Connectivity    ,java数据库连接,是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成

  4. .jdo :JavaData.object  一个用于存取某种数据仓库中的对象的标准化API

2、metastore的三种配置

2.1分类以及配置


分为三种:embedded metastore (内嵌式)、local metastore(本地)、remote metastore (远程)(如下图所示:)

  • embedded metastore

默认情况下,metastore服务和hive服务运行在同一个JVM中,它包含一个内嵌的以本地磁盘为存储的derby数据库实例

这种方式是最简单的存储方式,只需要在hive-site.xml做如下配置便可:

HIVE之-------metastore

  • 执行初始化命令:schematool -dbType derby -initSchema

  • 查看初始化后的信息: schematool -dbType derby -info

  • 配置完成后就可在shell中以CLI的方式访问hive 进行操作验证

注:

使用derby存储方式时,运行hive会在当前目录生成一个derby文件一个metastore_db目录。这种存储方式的弊端是在同一个目录下同时只能有一个hive客户端能使用数据库,否则会提示错误信息。

  • local metastore

本地数据集仓库以mysql数据库为例,此存储方式需要在本地运行一个mysql服务器,hive-site.xml作如下配置:需要将mysql的jar包拷贝到$HIVE_HOME/lib目录下))

HIVE之-------metastore


  • 如果是第一次需要执行初始化命令:schematool -dbType mysql -initSchema


  • 查看初始化后信息 schematool -dbType mysql -info

  • 初始化后查看mysql中表情况:show tables;


  • remote metastore

远程配置中,一个或者多个metastore服务器和hive服务运行在不同的进程内。数据库可以完全置于防火墙后,客户端不需要数据库凭据(用户名和密码),从而提供了更好的可管理性和安全。

以Mysql数据库为例:创建好用户:hive;database:hive_meta

(需要把mysql的驱动包copy到目录 <HIVE_HOME>/lib 中)

Remote方式需要分别配置服务端和客户端的配置文件:


服务端hive-site.xml的配置文件:


  • 如果是第一次需要执行初始化命令:schematool -dbType mysql -initSchema


客户端的配置文件:

  • hive metastore 服务端启动命令:hive --service metastore -p <port_num>
    如果不加端口默认启动:hive --service metastore,则默认监听端口是:9083 ,注意客户端中的端口配置需要和启动监听的端口一致。服务端启动正常后,客户端就可以执行hive操作了。


2.2 重要的metastore属性


从以上的配置文件可以看出,针对metastore的配置存在以下几个重要的配置属性

  •  URL(相对于fs.default.name(HDFS的默认路径)的目录,托管表(由hive负责管理的数据,Hive把数据移入到仓库目录,即warehous directory)就储存在这里)




    1)属性名称:hive.metastore.warehouse.dir  (HIVE的数据仓库的目录是hdfs上的)

         类型:URI

         默认值:/user/hive/warehouse


    2)属性名称:hive.metastore.uris(hive的数据仓库目录,这里指多个数据仓库的情况下))

         类型:逗号分隔的URI,无默认值

         如果不设定,就使用当前的metastore,否则连接到由URI列表指定要连接的远程metastore服务器。如果有多个远程metastore服务器,客户端会以询轮(round robin)的方式连接



  • 3)属性名称:hive.jdo.option.ConnectionURL(metastore数据库的JDBC 的URL

          类型:URI

          默认值:jdbc:derby:;databaseName=metastored b; create=true

        注:如果是本地mysql,这边就设置为:jdbc:mysql://host/dname? createDatabaseIfNotExist=true




  • 驱动

       属性名称 javax.jdo.option.ConnectionDriverName(JDBC驱动器的类名)

       类型:字符串

       默认值:org.apache.derby.jdbc.EmbeddedDriver

    注:如果是本地mysql,这边就设置为:com.mysql.jdbc.Driver




  • 用户名、密码

    1)属性名称:javax.jdo.option.ConnectionDriverName(JDBC用户名)

       类型:字符串

       默认值:APP


    2)属性名称:javax.jdo.option.ConnectionDriverPsssword(JDBC密码)

         类型:字符串

         默认值:mine





以上是关于HIVE之-------metastore的主要内容,如果未能解决你的问题,请参考以下文章

大数据(Hive的MetaStore切换及其Hive的语法细节)

derby 中的 Hive Metastore 与 Hive/Warehouse 中的 Hive Metastore 有啥区别?

远程连接元数据库hive.metastore.uris怎么写

Spark 2 连接到 Hive MetaStore [重复]

Hive安装配置指北(含Hive Metastore详解)

hive开启metastore服务