1.1.1 认识Hive

1. Hive产生的背景

Hadoop中的MapReduce计算模型能将计算任务切分成多个小单元,然后分布到各个节点上去执行,从而降低计算成本并提高扩展性。但是使用MapReduce进行数据处理的门槛比较高,传统的数据库开发、管理和运维的人员必须掌握Java面向MapReduce API编程并具备一定的编程基础后,才能使用MapReduce处理数据。

然而,Hadoop分布式文件系统(Hadoop Distributed File System,HDFS)中最关键的一点就是,数据存储在HDFS上是没有Schema(模式)概念的。这里的Schema相当于表里面的列、字段、字段名称、字段与字段之间的分隔符等,也可称为Schema信息。在HDFS上的数据文件通常是纯文本文件。

那么能否让用户将数据文件从一个现有的数据架构转移到Hadoop上来呢?假设该数据架构是基于传统关系型数据库和SQL查询的。其实对于大量的SQL用户来说,这个问题很难解决。针对这个挑战,Hive在Facebook诞生了。

2. 什么是Hive

Apache Hive(以下简称Hive)是一个由Apache软件基金会维护的开源项目,由Facebook贡献。其前身是Apache Hadoop中的一个子项目,现已成为Apache顶级项目。

Hive是一个基于Hadoop的数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,同时可以将SQL语句转化为MapReduce作业进行运行。Hive具有一系列功能,可以进行数据提取、转化和加载,是一种可以查询和分析存储在Hadoop中的大规模数据的工具。总之,Hive被设计成能够非常方便地进行大数据的汇总、即席查询(ad-hoc)与分析的工具。

对存储在HDFS中的数据进行分析与管理时,无须使用MapReduce编程而可以通过一个工具来完成相应的操作,这个工具就是Hive。从这一点上来说,Hive也是为消除MapReduce样板式的编程而产生的。

在Hadoop大行其道之前,大部分数据仓库应用程序都须基于关系型数据库实现。数据仓库应用程序通常是建立在数据仓库上的数据应用,包括报表展示、即席查询、数据分析、数据挖掘等。值得注意的是,数据仓库与数据库有所不同,数据仓库源自数据库而又不同于数据库。它们的主要区别是数据仓库适合联机分析处理(On-Line Analytical Processing,OLAP),通常是对某些主题的历史数据进行分析;而数据库适合联机事务处理(On-Line Transaction Processing,OLTP),通常是在数据库联机时对业务数据进行添加、删除、修改、查询等操作。Hive被设计成数据仓库,其早期版本或新版本在缺省情况(系统默认状态)下并不支持事务,所以并不适合OLTP。

3. Hive在Hadoop生态系统的位置

Hive可以将存储在HDFS中的结构化数据文件映射成类似关系型数据库表,并接收类SQL语句,将其转化为MapReduce程序去执行。所以Hive必须依赖Hadoop而存在,它在Hadoop生态系统中的位置如图1.1所示。

图1.1 Hive在Hadoop生态系统中的位置

从图1.1中可以看出,运行Hive的必要环境便是Hadoop的核心:HDFS、MapReduce以及YARN。也可以这样理解,Hive是由Hadoop衍生出来的上层应用之一:SQL on Hadoop。Hive执行的本质仍然是MapReduce,但多了一步SQL至MapReduce的转化操作,所以相同条件下,Hive在运行时并没有直接编写MapReduce执行效率高。

4. Hive与传统关系型数据库

Hive与传统关系型数据库(Relational Database Management System,RDBMS)有很多相同的地方,包括查询语言与数据存储模型等。Hive的SQL方言一般被称为HiveQL,简称HQL。HQL并不完全遵循SQL92标准,比如HQL只支持在From子句中使用子查询,并且子查询必须有名字。最重要的是,HQL须在Hadoop上执行,而非传统的数据库。在存储模型方面,数据库、表都是相同的概念,但Hive中增加了分区和分桶的概念。

Hive与RDBMS也有其他不同的地方,如在RDBMS中,表的Schema是在数据加载时就已确定,如果不符合Schema则会加载失败;而Hive在加载过程中不对数据进行任何验证,只是简单地将数据复制或者移动到表对应的目录下。这也是Hive能够支持大规模数据的基础之一。

事务、索引以及更新是RDBMS非常重要的特性,鉴于Hive的设计初衷,这些特性在开始之初就不是Hive设计目标。

更多Hive与传统关系型数据库(RDBMS)的对比,如表1-1所示。

表1-1 Hive与RDBMS对比

除了上述区别外,通常RDBMS可以用于在线应用中,而Hive主要进行离线的大数据分析。Hive具有SQL数据库的很多类似功能,但应用场景完全不同,故在使用的时候要特别注意其的自身特性。

5. Hive的特点与优势

Hive提供了一种比MapReduce更简单、更优的数据开发方式,使得越来越多的人开始使用Hadoop,甚至有很多Hadoop用户首选使用的大数据工具便是Hive。Hive具有以下特点。

➢ HQL与SQL有着相似的语法,大大提高了开发效率。

➢ Hive支持运行在不同的计算框架上,包括YARN、Tez、Spark、Flink等。

➢ Hive支持HDFS与HBase上的ad-hoc。

➢ Hive支持用户自定义的函数、脚本等。

➢ Hive支持Java数据库连接(Java Database Connectivity,JDBC)与开放数据库连接(Open Database Connectivity,ODBC)驱动,建立了自身与ETL、BI工具的通道。

在生产环境中,Hive具有以下优势。

➢ 可扩展:Hive可以自由扩展集群的规模,一般情况下无须重启服务。

➢ 可延展:Hive支持用户自定义函数,用户可根据自己的需求来编写自定义函数。

➢ 可容错:Hive良好的容错性使得节点出现问题时SQL仍可完成执行。

总之,当我们使用Hive时,操作接口采用类SQL语法,提高了快速开发的能力,避免了编写复杂的MapReduce任务,减少了开发人员的学习成本,而且扩展很方便。