Apache Hive 教程

Hive Tutorial

资料来源:Hive Tutorial (tutorialspoint.com)

Hive是Hadoop中用于处理结构化数据的数据仓库基础设施工具。它驻留在Hadoop之上,对大数据进行汇总,使查询和分析变得容易

这是一个简短的教程,介绍了如何在Hadoop分布式文件系统中使用Apache Hive HiveQL。本教程可以成为你成为一个成功的Hadoop开发人员的第一步。

1. Hive-简介

1.1 学习Hive的前置知识

“大数据”一词用于大型数据集的集合,这些数据集包括巨大的容量、高速度和每天都在增加的各种数据。传统的数据管理系统难以处理大数据。因此,Apache软件基金会引入了一个名为Hadoop的框架来解决大数据管理和处理方面的挑战。

hadoop

Hadoop是一个开源框架,用于在分布式环境中存储和处理大数据。它包含两个模块,一个是MapReduce,另一个是HDFS (Hadoop Distributed File System)。这是hadoop1.x,hadoop2.x以后还引入了Yarn

MapReduce:它是一个并行编程模型,用于处理大型商用硬件集群上的大量结构化、半结构化和非结构化数据。

HDFS:Hadoop分布式文件系统是Hadoop框架的一部分,用于存储和处理数据集。它提供了一个在商用硬件上运行的容错文件系统。

Hadoop生态系统包含不同的子项目(工具),如Sqoop、Pig和Hive,用于帮助Hadoop模块。

Sqoop:用于在HDFS和RDBMS之间导入和导出数据。

Pig:它是一个过程语言平台,用于开发MapReduce操作的脚本。

Hive:用于开发SQL类型脚本来执行MapReduce操作的平台。

注意:执行MapReduce操作有多种方式:

  • 传统方法使用Java MapReduce程序处理结构化、半结构化和非结构化数据。
  • MapReduce使用Pig来处理结构化和半结构化数据的脚本方法。
  • Hive Query Language (HiveQL或HQL),使用Hive代替MapReduce处理结构化数据。

前面讲了那么多前置知识

1.2 什么是Hive?

如开头所说,Hive是Hadoop中用于处理结构化数据的数据仓库基础设施工具。它驻留在Hadoop之上,对大数据进行汇总,使查询和分析变得容易。

最初Hive是由Facebook开发的,后来Apache软件基金会接受了它,并以Apache Hive的名义将其进一步开发为开源。它被不同的公司使用。例如,Amazon在Amazon Elastic MapReduce中使用了它。


Hive不是什么?

不是 关系数据库

不是 联机事务处理(OLTP)的设计

不是 用于实时查询和行级更新的语言


Hive的特点

  • 它将模式(schema )存储在数据库中,并将处理后的数据存储到HDFS中。
  • 它是为OLAP(联机分析处理)设计的。
  • 它提供用于查询的SQL类型语言,称为HiveQL或HQL。
  • 它是熟悉的、快速的、可伸缩的和可扩展的。

tips:OLAP=Online Analytical Processing, OLTP = Online Transaction Processing


1.3 Hive的架构

Hive的架构示意图如下:

Hive Architecture

这个组件图包含不同的单元。各单元介绍如下表:

Unit Name Operation
User Interface Hive是一个数据仓库基础架构软件,可以创建用户和HDFS之间的交互。Hive支持的用户界面包括Hive Web UI、Hive命令行和Hive HD Insight (Windows服务器)。
Meta Store Hive选择各自的数据库服务器来存储表、数据库、表中的列、它们的数据类型和HDFS映射的模式或元数据。
HiveQL Process Engine HiveQL类似于在Metastore上查询模式信息的SQL。它是MapReduce程序的传统方法的替代品之一。不用Java编写MapReduce程序,我们可以为MapReduce作业编写查询并处理它。
Execution Engine HiveQL进程引擎与MapReduce的对接部分是Hive Execution Engine。执行引擎处理查询并生成与MapReduce结果相同的结果。它使用MapReduce的风格。
HDFS or HBASE Hadoop分布式文件系统或HBASE是将数据存储到文件系统中的数据存储技术。

1.4 Hive的工作流程

Hive和Hadoop之间的工作流程如下图所示。

How Hive Works

下表定义了Hive与Hadoop框架的交互方式:

Step No. Operation
1 执行查询:Hive接口(如Command Line或Web UI)将查询发送给驱动程序(任何数据库驱动程序,如JDBC、ODBC等)执行。
2 驱动程序获得计划:驱动程序借助查询编译器对查询进行解析,检查查询的语法和查询计划或查询的要求。
3 编译器获取元数据:编译器向Metastore(任何数据库)发送元数据请求。
4 Metastore发送元数据:Metastore发送元数据作为对编译器的响应。
5 编译器发送计划:编译器检查需求并将计划重新发送给驱动程序。至此,查询的解析和编译已经完成。
6 执行引擎执行计划:驱动程序将执行计划发送给执行引擎。
7 MapReduce执行作业(job):在内部,执行任务的进程是一个MapReduce任务。执行引擎将作业发送给位于Name节点中的JobTracker,并将该作业分配给位于Data节点中的TaskTracker。这里,查询执行MapReduce作业。
7.1 执行引擎进行元数据操作:同时在执行过程中,执行引擎可以通过Metastore执行元数据操作。
8 执行引擎获取结果:执行引擎接收来自Data节点的结果。
9 执行引擎发送结果:执行引擎将这些结果值发送给驱动程序。
10 驱动程序发送结果:驱动程序将结果发送给Hive接口。