程序员社区

HIVE的架构模型

一.Hive 能做什么,与mapreduce 相比优势在哪里(相对于开发)

hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。 相对于mapreduce 离线计算需要写很多java代码去实现数据提取,hive可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用开发程序,更适合数据仓库的统计分析。

二.为什么说Hive 是Hadoop 的数据仓库,从数据存储和分析方面理解?

1 Hive是建立在 Hadoop 上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。Hive 定义了简单的类 SQL 查询语言,称为 HQL,它允许熟悉 SQL 的用户查询数据。同时,这个语言也允许熟悉 MapReduce 开发者的开发自定义的 mapper 和 reducer 来处理内建的 mapper 和 reducer 无法完成的复杂的分析工作。可以将SQL 查询转换为MapReduce 的job 在Hadoop集群上执行。

2 Hive 没有专门的数据存储格式,也没有为数据建立索引,用户可以非常自由的组织 Hive 中的表,只需要在创建表的时候告诉 Hive 数据中的列分隔符和行分隔符,Hive 就可以解析数据。Hive 中所有的数据都存储在 HDFS 中,Hive 中包含以下数据模型:表(Table),外部表(External Table),分区(Partition),桶(Bucket)。

3 Hive 中的 Table 和数据库中的 Table 在概念上是类似的,每一个 Table 在 Hive 中都有一个相应的目录存储数据。例如,一个表 pvs,它在 HDFS 中的路径为:/xxxx/pvs,其中,xxxx 是在 hive-site.xml 中由 ${hive.metastore.warehouse.dir} 指定的数据仓库的目录,所有的 Table 数据(不包括 External Table)都保存在这个目录中。

4 Partition 对应于数据库中的 Partition 列的密集索引,但是 Hive 中 Partition 的组织方式和数据库中的很不相同。在 Hive 中,表中的一个 Partition 对应于表下的一个目录,所有的 Partition 的数据都存储在对应的目录中。例如:pvs 表中包含 ds 和 ctry 两个 Partition,则对应于 ds = 20180801, ctry = CHINA 的 HDFS 子目录为:/wh/pvs/ds=20180801/ctry=CHINA;对应于 ds = 20180801, ctry = USA 的 HDFS 子目录为;/wh/pvs/ds=20180801/ctry=USA

5 Buckets 对指定列计算 hash,根据 hash 值切分数据,目的是为了并行,每一个 Bucket 对应一个文件。将 user 列分散至 32 个 bucket,首先对 user 列的值计算 hash,对应 hash 值为 0 的 HDFS 目录为:/wh/pvs/ds=20090801/ctry=US/part-00000;hash 值为 20 的 HDFS 目录为:/wh/pvs/ds=20090801/ctry=US/part-00020

三.HIVA的整体架构

HIVE的架构模型插图
HIVE的架构

基本组成
1、 用户接口
CLI,Shell 终端命令行(Command Line Interface),采用交互形式使用 Hive 命令行与 Hive进行交互。

JDBC/ODBC,是 Hive 的基于 JDBC 操作提供的客户端,用户(开发员,运维人员)通过这连接至 Hive server 服务。同时现在比较火的Beeline的方式也是基于JDBC来实现的。通过jdbc和hiveserver2建立连接,发送相应的hql语句,hiveserver2对sql语句进行解析,执行。

Web UI。

2、Thrift Server
Thrift 是 Facebook 开发的一个软件框架,可以用来进行可扩展且跨语言的服务的开发,Hive 集成了该服务,能让不同的编程语言调用 Hive 的接口。

3 、 元数据存储
元数据,通俗的讲,就是存储在 Hive 中的数据的描述信息。Hive 中的元数据通常包括:表的名字,表的列和分区及其属性,表的属性(内部表和外部表),表的数据所在目录Metastore 默认存在自带的 Derby 数据库中。Derby缺点就是不适合多用户操作,并且数据存储目录不固定。数据库跟着 Hive 走,极度不方便管理。通常存我们自己创建的 MySQL 库( 本地 或 远程),然后Hive 和 MySQL 之间通过 MetaStore 服务交互。

4 、Driver
编译器 (Compiler) ,优化器 (Optimizer) ,执行器 (Executor )
Driver 组件完成 HQL 查询语句从词法分析,语法分析,编译,优化,以及生成逻辑执行计划的生成。生成的逻辑执行计划存储在 HDFS 中,并随后由 MapReduce 调用执行

Hive 的核心是驱动引擎, 驱动引擎由四部分组成:
(1) 解释器:解释器的作用是将 HiveSQL 语句转换为抽象语法树(AST)
(2) 编译器:编译器是将语法树编译为逻辑执行计划
(3) 优化器:优化器是对逻辑执行计划进行优化
(4) 执行器:执行器是调用底层的运行框架执行逻辑执行计划


Hive是如何将SQL转化为MapReduce任务的,整个编译过程分为六个阶段:

(1)Antlr定义SQL的语法规则,完成SQL词法,语法解析,将SQL转化为抽象语法树AST Tree
(2)遍历AST Tree,抽象出查询的基本组成单元QueryBlock
(3)遍历QueryBlock,翻译为执行操作树OperatorTree
(4)逻辑层优化器进行OperatorTree变换,合并不必要的ReduceSinkOperator,减少shuffle数据量
(5)遍历OperatorTree,翻译为MapReduce任务
(6)物理层优化器进行MapReduce任务的变换,生成最终的执行计划

赞(0) 打赏
未经允许不得转载:IDEA激活码 » HIVE的架构模型

相关推荐

  • 暂无文章

一个分享Java & Python知识的社区