Hive简介及元数据存储(Metastore的三种配置方式)

一 Hive介绍

  1. Hive是基于Hadoop的一个数据仓库,Hive能够将SQL语句转化为MapReduce任务进行运行。
      Hive架构图分为以下四部分:
      在这里插入图片描述

1、Hive有三个用户接口:

a. 命令行接口(CLI):以命令行的形式输入SQL语句进行数据数据操作
b. Web界面:通过Web方式进行访问。     
c. Hive的远程服务方式:通过JDBC等方式进行访问。              

2、元数据存储

将元数据存储在关系数据库中(MySql、Derby),元数据包括表的属性、表的名称、表的列、分区及其属性以及表数据所在的目录等。

3、解释器、编译器、优化器

分别完成SQL查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在HDFS中,并在随后由MapReduce调用执行。

4、数据存储

Hive没有专门的数据存储格式,也没有为数据建立索引,Hive中所有数据都存储在HDFS中。

Hive包含以下数据模型:表、外部表、分区和桶

二 Metadata,Metastore的作用

(1)Metadata即元数据: 元数据包含用Hive创建的database、tabel等的元信息。元数据存储在关系型数据库中。如Derby、MySQL等。

(2)Metastore的作用是: 客户端连接metastore服务,metastore再去连接MySQL数据库来存取元数据。有了metastore服务,就可以有多个客户端同时连接,而且这些客户端不需要知道MySQL数据库的用户名和密码,只需要连接metastore 服务即可。

三 Hive的元数据存储(Metastore的三种配置方式)

由于元数据不断地修改、更新,所以Hive元数据不适合存储在HDFS中,一般存在RDBMS中。

1、内嵌模式(Embedded)

hive服务和metastore服务运行在同一个进程中,derby服务也运行在该进程中.

内嵌模式使用的是内嵌的Derby数据库来存储元数据,也不需要额外起Metastore服务。

这个是默认的,配置简单,但是一次只能一个客户端连接,适用于用来实验,不适用于生产环境。

2、本地模式(Local)

本地安装mysql 替代derby存储元数据

这种安装方式和嵌入式的区别在于,不再使用内嵌的Derby作为元数据的存储介质,而是使用其他数据库比如MySQL来存储元数据。

hive服务和metastore服务运行在同一个进程中,mysql是单独的进程,可以同一台机器,也可以在远程机器上。

这种方式是一个多用户的模式,运行多个用户client连接到一个数据库中。这种方式一般作为公司内部同时使用Hive。

每一个用户必须要有对MySQL的访问权利,即每一个客户端使用者需要知道MySQL的用户名和密码才行。

 <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://127.0.0.1:3306/hive? createDatabaseIfNotExit=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>
    <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>root</value>
    </property>
    <property>
      <name>hive.metastore.uris</name>
      <value></value>
      <description>指向的是运行metastore服务的主机,这是hive客户端配置,metastore服务不需要配置</description>
   </property>
    <property>
      <name>hive.metastore.warehouse.dir</name>
      <value>/user/hive/warehouse</value>
      <description>hive表的默认存储路径,为HDFS的路径location of default database for the warehouse</description>
    </property>

3、远程模式(Remote)

远程安装mysql 替代derby存储元数据

Hive服务和metastore在不同的进程内,可能是不同的机器,该模式需要将hive.metastore.local设置为false,将hive.metastore.uris设置为metastore服务器URL,

如果有多个metastore服务器,将URL之间用逗号分隔,metastore服务器URL的格式为thrift://127.0.0.1:9083。

远程元存储需要单独起metastore服务,然后每个客户端都在配置文件里配置连接到该metastore服务。

将metadata作为一个单独的服务进行启动。各种客户端通过beeline来连接,连接之前无需知道数据库的密码。

仅连接远程的mysql并不能称之为“远程模式”,是否远程指的是metastore和hive服务是否在同一进程内.

hive metastore 服务端启动命令:

 hive --service metastore -p <port_num>

如果不加端口默认启动:hive --service metastore,则默认监听端口是:9083 。

注意客户端中的端口配置需要和启动监听的端口一致。服务端启动正常后,客户端就可以执行hive操作了。

客户端连接metastore服务配置如下:

<property>
    <name>hive.metastore.uris</name>
    <value>thrift://127.0.0.1:9083,thrift://127.0.0.1:9084</value>
    <description>指向的是运行metastore服务的主机</description>
  </property>

在服务器端启动一个MetaStoreServer,客户端利用Thrift协议通过MetaStoreServer访问元数据库。如下图:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41428711/article/details/85267888