本文旨在讲解Hive的运行原理,帮助使用者更好的了解在使用的过程中它做了些什么工作,深入的理解他的工作机制,提高开发人员理论层面的知识。后面会逐渐推出Hive使用、Hbase原理与使用等大数据专题类文章,敬请关注。
什么是Hive?
Hive是建立在 Hadoop 上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。Hive 定义了简单的类 SQL 查询语言,称为 HQL,它允许熟悉 SQL 的用户查询数据。同时,这个语言也允许熟悉 MapReduce 开发者的开发自定义的 mapper 和 reducer 来处理内建的 mapper 和 reducer 无法完成的复杂的分析工作。
Hive 构建在基于静态批处理的Hadoop 之上,Hadoop 通常都有较高的延迟并且在作业提交和调度的时候需要大量的开销。因此,Hive 并不能够在大规模数据集上实现低延迟快速的查询,例如,Hive 在几百MB 的数据集上执行查询一般有分钟级的时间延迟。
Hive 并不适合那些需要低延迟的应用,例如,联机事务处理(OLTP)。Hive 查询操作过程严格遵守Hadoop MapReduce 的作业执行模型,Hive 将用户的HiveQL 语句通过解释器转换为MapReduce 作业提交到Hadoop 集群上,Hadoop 监控作业执行过程,然后返回作业执行结果给用户。Hive 并非为联机事务处理而设计,Hive 并不提供实时的查询和基于行级的数据更新操作。Hive 的最佳使用场合是大数据集的批处理作业,例如,网络日志分析。
Hive与Hadoop
Hive的执行入口是Driver,执行的SQL语句首先提交到Drive驱动,然后调用compiler解释驱动,最终解释成MapReduce任务去执行。
Hive的服务端组件
1. Driver组件:该组件包括:Compiler、Optimizer、Executor,它可以将Hive的编译、解析、优化转化为MapReduce任务提交给Hadoop1中的JobTracker或者是Hadoop2中的SourceManager来进行实际的执行相应的任务。
2. MetaStore组件:存储着hive的元数据信息,将自己的元数据存储到了关系型数据库当中,支持的数据库主要有:Mysql、Derby、支持把metastore独立出来放在远程的集群上面,使得hive更加健壮。元数据主要包括了表的名称、表的列、分区和属性、表的属性(是不是外部表等等)、表的数据所在的目录。
3. 用户接口:CLI(Command Line Interface)(常用的接口:命令行模式)、Client:Hive的客户端用户连接至Hive Server ,在启动Client的时候,需要制定Hive Server所在的节点,并且在该节点上启动Hive Server、WUI:通过浏览器的方式访问Hive。
Hive的工作原理
如图:
流程大致步骤为:
1. 用户提交查询等任务给Driver。
2. 编译器获得该用户的任务Plan。
3. 编译器Compiler根据用户任务去MetaStore中获取需要的Hive的元数据信息。
4. 编译器Compiler得到元数据信息,对任务进行编译,先将HiveQL转换为抽象语法树,然后将抽象语法树转换成查询块,将查询块转化为逻辑的查询计划,重写逻辑查询计划,将逻辑计划转化为物理的计划(MapReduce), 最后选择最佳的策略。
5. 将最终的计划提交给Driver。
6. Driver将计划Plan转交给ExecutionEngine去执行,获取元数据信息,提交给JobTracker或者SourceManager执行该任务,任务会直接读取HDFS中文件进行相应的操作。
7. 获取执行的结果。
8. 取得并返回执行结果。
创建表时:
解析用户提交的Hive语句-->对其进行解析-->分解为表、字段、分区等Hive对象。根据解析到的信息构建对应的表、字段、分区等对象,从SEQUENCE_TABLE中获取构建对象的最新的ID,与构建对象信息(名称、类型等等)一同通过DAO方法写入元数据库的表中,成功后将SEQUENCE_TABLE中对应的最新ID+5.实际上常见的RDBMS都是通过这种方法进行组织的,其系统表中和Hive元数据一样显示了这些ID信息。通过这些元数据可以很容易的读取到数据。
Hive编译过程
基本流程为:将HiveQL转化为抽象语法树再转为查询块然后转为逻辑查询计划再转为物理查询计划最终选择最佳决策的过程。
优化器的主要功能:
1. 将多Multiple join 合并为一个Muti-way join
2. 对join、group-by和自定义的MapReduce操作重新进行划分。
3. 消减不必要的列。
4. 在表的扫描操作中推行使用断言。
5. 对于已分区的表,消减不必要的分区。
6. 在抽样查询中,消减不必要的桶。
7. 优化器还增加了局部聚合操作用于处理大分组聚合和增加再分区操作用于处理不对称的分组聚合。
Hive的数据类型
Hive支持原子和复杂数据类型,原子数据类型包括:数据值、布尔类型、字符串类型等,复杂的类型包括:Array、Map和Struct。其中Array和Map和java中的Array和Map是相似的,Struct和C语言中的Struct相似。
例如:
- Create table test(
- col1 Array<int>,
- col2 Map<String,int>,
- col3 Struct<a:String,b:int,c:Double>
- );
注意:
1. 原子数据类型是可以进行隐式的转换的,例如tinyInt类型会自动转为Int类型但是不能由int自动转为tinyInt类型。
2. 所有的整数类型、Float和String类型都可以转换为Double类型。
3. TinyInt、SmallInt、Int都可以转为Float类型。
4. Boolean 类型不可以转换为其他的任何类型。
5. 可以通过使用Cast操作显示的进行数据转换,例如Cast('1' as int);将字符串转为整型,如果强制转换失败如:Cast('X' as int);表达式返回的是NULL;
Hive的特点
http://blog.csdn.net/wangyang1354/article/details/50570903
相关推荐
【大数据技术之Hive】 Hive是Facebook开源的一款基于Hadoop的数据仓库工具,它使得用户能够使用类SQL的查询语言(HQL)处理存储在HDFS中的大规模数据。Hive的出现主要是为了解决在Hadoop上进行复杂数据查询的难题,...
《大数据书籍-Hbase架构设计》是一本专注于大数据领域中分布式数据库Hbase的深度解析书籍,适合对大数据技术尤其是Hbase感兴趣的程序员和数据分析师。书中详细阐述了Hbase的核心原理、生态环境以及在实际项目中的...
通过以上解析可以看出,该应聘者具备较强的大数据开发能力,不仅掌握了多项关键技术和工具的应用,还在实际项目中积累了丰富的实践经验。这些技能和经验将有助于其在未来的大数据开发工作中发挥重要作用。
【尚硅谷大数据技术之Hive1】章节主要介绍了Hive的基本概念、优缺点、架构原理以及与传统数据库的比较。 1. **Hive是什么** Hive是由Facebook开源的一个数据仓库工具,专门用来处理海量的结构化日志数据统计。它...
【尚硅谷大数据技术之 Hive1】章节主要介绍了Hive的基本概念、优缺点、架构原理以及与数据库的比较。 1. **Hive基本概念** Hive是由Facebook开源的一种数据仓库工具,设计用来处理海量的结构化日志数据统计。它...
【大数据技术原理与应用——基于Hadoop的数据仓库Hive】\n\n大数据技术在近年来发展迅速,其中Hive作为基于Hadoop的数据仓库工具,扮演着重要角色。本章主要介绍了Hive的相关知识,包括概述、系统架构、工作原理以及...
《大数据技术之Hive——从入门到精通》 Hive,作为Facebook开源的大数据处理工具,主要用于处理海量的结构化日志数据统计。它是一种基于Hadoop的数据仓库工具,允许用户通过类SQL语法进行数据查询和分析。Hive的...
解析器(SQLParser)、编译器(PhysicalPlan)、优化器(QueryOptimizer)和执行器(Execution)是Hive的关键组件,它们协同工作完成从SQL到MapReduce任务的转换过程。最后,驱动器(Driver)是Hive的核心,它负责...
大数据技术之Hive 大数据技术之Hive是基于Hadoop的一个数据仓库工具...大数据技术之Hive是一个功能强大且灵活的数据仓库工具,可以快速开发数据分析和报表系统,但需要注意Hive的缺点和限制,以便更好地应用Hive技术。
这本书全面解析了大数据技术的全貌,旨在帮助读者理解和掌握大数据的精髓,提升在信息时代的数据处理能力。 大数据技术的核心概念主要包括四V特征:大量性(Volume)、高速性(Velocity)、多样性(Variety)和价值...
### 大数据技术原理与应用——林子雨上机实验一知识点详解 #### 一、实验背景及目标 本实验是《大数据技术原理与应用》课程中的第一次实践操作,主要目的是帮助学生熟悉并掌握在大数据处理中最基础的操作系统——...
### 大数据技术之Hive全方位解析 #### 第1章 Hive基本概念 ##### 1.1 什么是Hive **Hive** 是一个基于 **Hadoop** 的数据仓库工具,它能够将结构化的数据文件映射成一张表,并提供类似于SQL的查询功能,即Hive ...
《Hive简明教程-大数据技术系列》是针对Hive这一大数据处理工具的全面解析,旨在帮助初学者快速掌握其核心概念和实用技巧。本文将深入探讨Hive的语法、原理以及相关的技术细节。 首先,Hive是Apache软件基金会开发...
- **Hive技术架构**: - **架构图**: 描述了Hive的组件和它们之间的交互。 - **Hive的核心**: 包括HiveQL解析器、编译器、优化器和执行器等。 - **Hive的底层存储**: 使用HDFS或其他兼容的文件系统。 - **Hive...
在本课程设计中,主题是“基于Antlr4的Hive SQL解析”,这涉及到了两个主要的技术领域:Antlr4和Hive SQL。Antlr4是一个强大的解析工具,用于生成解析器和词法分析器,它能处理各种语言的语法,包括SQL。而Hive SQL...
【大数据技术之 Hive 学习文档】 Hive 是一个基于 Hadoop 的数据仓库工具,它允许用户使用类似于 SQL 的查询语言(Hive Query Language,HQL)对存储在 HDFS 上的大量结构化数据进行分析。Facebook 开源了 Hive,以...