Hive概述

Hive是建立在Hadoop之上的数据仓库,可对存储在HDFS上的文件中的数据集进行数据整理、特殊查询和分析处理。Hive在某种程度上可以看成是用户编程接口,本身并不存储和处理数据,依赖于HDFS存储数据,依赖MapReduce处理数据。

数据仓库(Data Warehouse)是一个面向主题的(Subject Oriented)、集成的(Integrated)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant)的数据集合,用于支持管理决策。

Hive是Facebook开发的一个基于Hadoop的数据仓库工具。是一个在Hadoop上构建数据仓库的软件,它支持通过类SQL的HQL语言操作结构化的数据。

Hive一般用来作为公司级数据仓库,集中各业务线有价值的数据。对内部Hive提供离线海量数据分析服务:

  • 数据挖掘
  • 产品报表
  • 经营分析

Hive定义了一种类似SQL的查询语言,被称为HQL,对于熟悉SQL的用户可以直接利用Hive来查询数据,但HiveQL不完全支 持SQL标准,如不支持更新操作、索引和事务,其子查询和连接操作也存在很多限制。同时,这个语言 也允许熟悉 MapReduce 开发者们开发自定义的mappers和reducers来处理内建的mappers和reducers无法完 成的复杂的分析工作。

Hive的应用场景和局限性

Hive通常应用在以下场景中:


Hive的局限性,主要表现在以下几个方面:

  • 不是为在线事务处理而设计的。
  • 为交互式数据浏览提供可接受的延迟。
  • 不提供实时查询和行级更新。
  • Hive查询的延迟通常非常高。
Hive和HBase的关系

Hive可以直接操作HDFS中的文件作为它的表的数据,也可以使用HBase数据库作为它的表。 Hive和HBase的数据流描述如下图所示。 数据源经过ETL工具被抽取到HDFS存储;再由Hive对原始数据进行清洗、处理和计算; Hive清洗处理后的结果,如果是面向海量数据随机查询场景的可存入Hbase,进而展开具体的数据应用。

图 Hive和HBase数据流关系

那么Hive与Hbase有什么区别呢?

1)Hive中的表是纯逻辑表,就只是表的定义等,即表的元数据。Hive本身不存储数据,它完全依赖HDFS和MapReduce。这样就可以将结构化的数据文件映射为为一张数据库表,并提供完整的SQL查询功能,并将SQL语句最终转换为MapReduce任务进行运行。 而Hbase表是物理表,适合存放非结构化的数据。

2)Hive是基于MapReduce来处理数据,而MapReduce处理数据是基于行的模式;Hbase处理数据是基于列的而不是基于行的模式,适合海量数据的随机访问。

3)Hbase的表是疏松的存储的,因此用户可以给行定义各种不同的列;而Hive表是稠密型,即定义多少列,每一行有存储固定列数的数据。

4)Hive使用Hadoop来分析处理数据,而Hadoop系统是批处理系统,因此不能保证处理的低迟延问题;而Hbase是近实时系统,支持实时查询。

5)Hive不提供行级别的更新,它适用于大量append-only数据集(如日志)的批任务处理。而基于Hbase的查询,支持行级别的更新。

6)Hive提供完整的SQL实现,通常被用来做一些基于历史数据的挖掘、分析。而HBase是一个NoSQL,不适用与有join,多级索引,表关系复杂的应用场景。


《Spark原理深入与编程实战》