和Hadoop 关系
Hive 是基于Hadoop 的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以查询和分析存储在Hadoop 中的大规模数据的机制。Hive 数据仓库工具能将结构化的数据文件映射为一张数据库表,并提供SQL 查询功能,能将SQL 语句转变成MapReduce 任务来执行。
关于Hive 的描述可以归结为这么几点来理解:
l Hive 是工具。
l Hive 可以用来构建数据仓库。
l Hive 具有 类 似SQL 的操作语句HQL 。
l Hive 是用来开发SQL 类型 脚 本,用于开发MapReduce 操作的平台。
Hive 最初由Facebook 开源,用于解决海量结构化日志的数据统计分析,是建立在Hadoop 集群的HDFS 上的数据仓库基础框架,其本质是将类SQL 语句转换为MapReduce 任务运行。可以通过类SQL 语句快速实现简单的MapReduce 统计计算,十分适合数据仓库的统计分析。
所有Hive 处理的数据都存储在HDFS 中,Hive 在加载数据过程中不会对数据进行任何修改,只是将数据移动或复制到HDFS 中Hive 设定的目录下。所以Hive 不支持对数据的改写和添加,所有数据都是在加载时确定的。
因此,Hive 总的说来具有以下特点:
(1 )Hive 是一个构建在Hadoop 上的数据仓库框架。
(2 )Hive 设计的目的是让精通SQL 技能、但Java 编程技能相对较弱的数据分析师能够快速进行大数据分析项目开发与应用。
Hive 的能力在于直接分析通过ETL 清洗过后的半结构化数据,其步骤如图1-3 所示。

图1-3 非结构化数据分析步骤
Hive 构建在 Hadoop 之上,二者关系示意图如图1-4 所示。
它们关系解释如下:
l Hive 对外提供CLI 、Web Interface (Web 接口)、JDBC 、ODBC 等访问接口,Hadoop 提供后台存储和计算服务。
l HQL 中对查询语句的解释、优化、生成查询计划是由Hive Diver 完成的。
l 所有的数据都是存储在Hadoop 的HDFS 中。
l 查询计划被转化为 MapReduce 任务,在 Hadoop 中执行(但要注意有些查询也可能没有MapReduce 任务,如:select * from table )。
l Hadoop 和Hive 都是用UTF-8 编码的。
图1-4 Hive
与Hadoop
关系
总之,Hive 是Hadoop 的延申。Hive 是一个提供了查询功能的数据仓库核心组件,Hadoop 底层的HDFS 为Hive 提供了数据存储,MapReduce 为Hive 提供了分布式运算。HDFS 上存储着海量的数据,我们要对这些数据进行计算和分析,则需要使用Java 编写MapReduce (MR )程序来实现,但Java 编程门槛较高,且一个MapReduce 程序写起来要几十上百行。而Hive 可以直接通过SQL 操作Hadoop ,SQL 简单易写、可读性强,Hive 将用户提交的SQL 解析成MapReduce 任务供Hadoop 直接运行。Hive 某种程度来说也不进行数据计算,只是个解释器,只负责将用户需要对数据处理的逻辑,通过SQL 编程提交后解释成MapReduce 程序,然后将这个MR 程序提交给YARN 进行调度执行。所以,实际进行分布式运算的是MapReduce 程序。
本文节选自《 Hive 入门与大数据分析实战》,内容发布获得作者和出版社授权。
