Hive是由Facebook开源的,构建于Hadoop之上的数据仓库工具,将结构化的数据映射成一张表格,提供了类SQL的查询语句,底层可以转换为MapReduce去执行。Hive的数据存储在HDFS之上,大部分的查询计算由MapReduce完成,Hive将元数据存储在数据库中。
1.hive简介
Hive是由FaceBook开源用于解决海量结构化日志的数据统计工具。hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL的查询功能。hive的本质就是将HSQL转化成MapReduce程序。
2.hive架构

- Client:用户可以通过CLI(command-line interface,命令行窗口)、jdbc访问Hive。
- Metastore(元数据):元数据包括表名、表所属的数据库、表的拥有者、列/分区字段、表的类型、表的数据所在目录等。元数据信息默认存储在自带的derby数据库中,推荐使用MySQL存储元数据信息。
- 使用HDFS进行数据存储,使用MapReduce进行计算。
- Driver(驱动器):(1)解析器(SQL Parser):将SQL字符串转换成抽象语法树AST,这一步一般都用第三方工具库完成,比如antlr;对AST进行语法分析,比如表是否存在、字段是否存在、SQL语义是否有误。(2)编译器(Physical Plan):将AST编译生成逻辑执行计划。(3)优化器(Query Optimizer):对逻辑执行计划进行优化。(4)执行器(Execution):把逻辑执行计划转换成可以运行的物理计划。对于Hive来说,就是MapReduce或者Spark。
Hive通过给用户提供的一系列交互接口,接收到用户的指令(SQL),使用自己的Driver,结合元数据(MetaStore),将这些指令翻译成MapReduce,提交到Hadoop中执行。最后,将执行返回的结果输出到用户交互接口。
3.Hive的数据存储
- Hive的数据存储基于Hadoop的 HDFS。
- Hive没有专门的数据存储格式。
- Hive默认可以直接加载文本文件(TextFile),还支持SequenceFile、RCFile等文件格式。
- 针对普通文本数据,我们在创建表时,只需要指定数据的列分隔符与行分隔符,Hive即可解析里面的数据。
4.Hive的优缺点
hive的优点:
- 接口采用类SQL语法,提供快速开发的能力
- 避免了去写MR程序,减少开发人员的学习成本
- Hive的执行延迟比较高,因此Hive常用于数据分析,对实时性要求不高的场合
- Hive的优势在于处理大数据,对于处理小数据没有优势,因为Hive的执行延迟比较高
- Hive支持自定义函数,用户可以根据自己的需求来实现自己的函数。
hive的缺点:
- Hive的HSQL表达能力有限,迭代算法无法表达,数据挖掘方面不擅长,由于MR数据处理流程的限制,效率更高的算法却无法实现
- Hive的效率 比较低,Hive自动生成的MR作业,通常情况下不够智能化,Hive调优比较困难,粒度较粗。
5.Hive VS Mysql
HIVE MySQL
---------------------------------------------------------------------
数据存储位置 HDFS 本地磁盘
数据格式 用户定义 系统决定
数据更新 不支持(不支持修改和删除) 支持(支持增删改查)
索引 有,但较弱,一般很少用 有,经常使用的
执行 MapReduce Executor
执行延迟 高 低
可扩展性 高 低
数据规模 大 小
- 数据库:传统的关系型数据库主要应用在基本的事务处理,例如银行交易之类的场景。数据库支持增删改查这些常见的操作。
- 数据仓库:主要做一些复杂的分析操作,侧重决策支持,相对数据库而言,数据仓库分析的数据规模要大得多。但是数据仓库只支持查询操作,不支持修改和删除。
- 数据库与数据仓库的本质区别就是 OLTP与OLAP 的区别。
6.Hive和Hbase的区别
- Hive中的表是纯逻辑表,就只是表的定义等,即表的元数据。Hive本身不存储数据,它完全依赖HDFS和MapReduce。这样就可以将结构化的数据文件映射为为一张数据库表,并提供完整的SQL查询功能,并将SQL语句最终转换为MapReduce任务进行运行。而HBase表是物理表,适合存放非结构化的数据。
- Hive是基于MapReduce来处理数据,而MapReduce处理数据是基于行的模式;HBase处理数据是基于列的而不是基于行的模式,适合海量数据的随机访问。
- HBase的表是疏松的存储的,因此用户可以给行定义各种不同的列;而Hive表是稠密型,即定义多少列,每一行有存储固定列数的数据。
- Hive使用Hadoop来分析处理数据,而Hadoop系统是批处理系统,因此不能保证处理的低迟延问题;而HBase是近实时系统,支持实时查询。
在Hadoop为首的大数据技术生态当中,Hive和Hbase各居其位,各自发挥着自身的作用,把它们各自的定位搞清楚,对于后续的学习很重要。
7.OLTP VS OLAP
- OLTP(On-Line Transaction Processing):操作型处理,称为联机事务处理,也可以称为面向交易的处理系统,它是针对具体业务在数据库联机的日常操作,通常对少数记录进行查询、修改。用户较为关心操作的响应时间、数据的安全性、完整性等问题。
- OLAP(On-Line Analytical Processing):分析型处理,称为联机分析处理,一般针对某些主题历史数据进行分析,支持管理决策。
其实从字面上来对比,OLTP 和 OLAP 只有一个单词不一样,OLTP侧重于事务,OLAP侧重于分析。所以数据库和数据仓库的特性是不一样的,不过我们平时在使用的时候,可以把Hive作为一个数据库来操作,但是你要知道他们两个是不一样的。数据仓库的概念是比数据库要大的多。