Hive的架构及元数据三种存储模式

文章目录
什么是Hive?
Hive的特色
Hive的架构
元数据存储模式
java


什么是Hive?


  Hive最初是由FaceBook公司开发的一个基于Hadoop框架而且开源的一个数据仓库工具,后贡献给了Apache基金会由Apache来进行维护和更新。Hive能够将结构化的文件映射为一张数据表,但并不提供查询功能,而是将SQL转化为MapReduce任务进行运行。同时,Hive自己不存储数据,只是存储数据的路径或者操做信息,真的数据是存储在可靠的文件系统当中(如HDFS、Derby等)。mysql

Hive的特色


  Hive的存储是架构在一个数据库中并将处理数据储存到HDFS上web

  Hive专门为联机事务分析(OLAP)设计。sql

  Hive使用HSQL来提供SQL类型语言查询。数据库

  Hive快速、简单而且可扩展。编程

Hive的架构

 

  由上图可知,Hive架构主要包括以下组件:CLI(command line interface)、JDBC/ODBC、Thrift Server、HWI(Hive WEB Interface) 、metastore和Driver(Complier、Optimizer和Executor),这些组件能够分为两大类:服务端组件和客户端组件。浏览器

  (1)客户端组件服务器

    一、CLI:命令行接口,是最经常使用的一种用户接口,CLI启动时会同时启动一个Hive副本。CLI是和Hive交互的最简单也是最经常使用方式,只须要在一个具有完整Hive环境下的Shell终端中键入hive便可启动服务。 用户能够在CLI上输入HQL来执行建立表、更改属性以及查询等操做。不过Hive CLI不适应于高并发的生产环境,仅仅是Hive管理员的好工具。网络

    二、JDBC/ODBC: JDBC是java database connection的规范,它定义了一系列java访问各种db的访问接口,所以hive-jdbc其实本质上是扮演一个协议转换的角色,把jdbc的标准协议转换为访问HiveServer服务的协议。hive-jdbc除了扮演网络协议转化的工做,并不承担他的工做,好比sql的合法性校验和解析,一概忽略 。ODBC是一组对数据库访问的标准AP ,它的底层实现源码是采用C/C++编写的。JDBC/ODBC都是经过hiveclient与hiveserver保持通信的,借助thrfit rpc协议来实现交互。架构

    三、HWI:HWI是Hive的web方为接口,提供了一种能够能够经过浏览器来访问Hive的服务。

  (2)服务端组件

    一、Thrift Server:Thrift是facebook开发的一个软件框架,它用来进行可扩展且跨语言的服务的开发,hive集成了Thrift Server服务,能让不一样的编程语言调用hive的接口。

    二、元数据(Metastore):元数据服务组件,这个组件用于存储hive的元数据, 包括表名、表所属的数据库、表的拥有者、列/分区字段、表的类型、表的数据所在目录等内容。hive的元数据存储在关系数据库里,支持derby、mysql两种关系型数据库。元数据对于hive十分重要,所以hive支持把metastore服务独立出来,安装到远程的服务器集群里,从而解耦hive服务和metastore服务,保证hive运行的健壮性。

    三、Driver组件:该组件包括Interpreter、Complier、Optimizer和Executor,它的做用是将咱们写的HiveQL(类SQL)语句进行解析、编译、优化,生成执行计划,而后调用底层的mapreduce计算框架。

      解释器:将SQL字符串转化为抽象语法树AST;

      编译器:将AST编译成逻辑执行计划;

      优化器:对逻辑执行计划进行优化;

      执行器:将逻辑执行计划转成可执行的物理计划,如MR/Spark

元数据存储模式


  Metastore的存储有两个部分,服务和存储,Hive的存储有三种部署模式,分别为内嵌模式、本地模式和远程模式。

             内嵌模式:这种模式也将单用户模式,它是Hive Metastore的最简单的部署方式,使用Hive内嵌的Derby数据库来存储元数据。可是Derby只能接受一个Hive会话的访问,试图启动第二个Hive会话就会致使Metastore链接失败。此模式链接到一个In-memory 的数据库Derby,通常用于Unit Test 。
             内嵌模式:这种模式也将单用户模式,它是Hive Metastore的最简单的部署方式,使用Hive内嵌的Derby数据库来存储元数据。可是Derby只能接受一个Hive会话的访问,试图启动第二个Hive会话就会致使Metastore链接失败。此模式链接到一个In-memory 的数据库Derby,通常用于Unit Test 。

    本地模式:本地模式也叫多用户模式,它是Metastore的默认模式(懒人专用模式),该模式下,单Hive会话(一个Hive 服务JVM)以组件方式调用Metastore和Driver。

    在hive-site.xml中设置MySQL的Connection URL、用户名和密码以及ConnectionDriverName;

    将MySQL的JDBC驱动Jar文件放到Hive的lib目录下。

hive.jdo.option.connectionURL="jdbc:mysql://{hostname}/{database name}?createDatabaseIfNotExist=true"

hive.jdo.option.ConnectionDriverName="com.mysql.jdbc.Driver"

hive.jdo.option.connectionUserName="{userName}"     

hive.jdo.option.connectionPassword="{userPassword}"



  远程模式:用于非Java客户端访问元数据库,在服务器端启动MetaStoreServer,客户端利用Thrift协议经过MetaStoreServer访问元数据库。 它将Metastore分离出来,成为一个独立的Hive服务(Metastore服务还能够部署多个)。这样的模式能够将数据库层彻底置于防火墙后,客户就再也不须要用户名和密码登陆数据库,避免了认证信息的泄漏。

属性    默认值    描述

hive.metastore.local // false为远程模式
hive.metastore.uris // 远端模式下Metastore的URI列表
hive.jdo.option.connectionURL // metastore数据库的JDBC URL
hive.jdo.option.ConnectionDriverName // JDBC驱动名
hive.jdo.option.connectionUserName // JDBC用户名
hive.jdo.option.connectionPassword // JDBC密码


   总结 : 对于数据存储,Hive没有专门的数据存储格式,也没有为数据创建索引,用户能够很是自由的组织Hive中的表,只须要在建立表的时候告诉Hive数据中的列分隔符和行分隔符,Hive就能够解析数据。Hive中全部的数据都存储在HDFS中,存储结构主要包括数据库、文件、表和视图。  

相关文章
相关标签/搜索