Hive - 简介

"大数据"一词用于指代大量、高速度、日益增加的各种数据的大型数据集集合。使用传统的数据管理系统很难处理大数据。因此,Apache 软件基金会推出了一个名为 Hadoop 的框架来解决大数据管理和处理挑战。

Hadoop

Hadoop 是一个开源框架,用于在分布式环境中存储和处理大数据。它包含两个模块,一个是 MapReduce,另一个是 Hadoop 分布式文件系统 (HDFS)。

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

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

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

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

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

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

注意: 有多种方法可以执行 MapReduce 操作:

  • 使用 Java MapReduce 程序处理结构化、半结构化和非结构化数据的传统方法。
  • 使用 Pig 的 MapReduce 脚本方法处理结构化和半结构化数据。
  • 使用 Hive 的 MapReduce 查询语言 (HiveQL 或 HQL) 处理结构化数据。

什么是 Hive

Hive 是一种数据仓库基础架构工具,用于处理 Hadoop 中的结构化数据。它位于 Hadoop 之上,用于汇总大数据,并使查询和分析变得容易。

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

Hive 不是

  • 关系数据库
  • 用于在线事务处理 (OLTP) 的设计
  • 用于实时查询和行级更新的语言

Hive 的功能

  • 它将模式存储在数据库中,并将处理后的数据存储到 HDFS 中。
  • 它专为 OLAP 设计。
  • 它提供用于查询的 SQL 类型语言,称为 HiveQL 或 HQL。
  • 它熟悉、快速、可扩展且易于扩展。

Hive 的架构

以下组件图描述了 Hive 的架构:

Hive Architecture

此组件图包含不同的单元。下表描述了每个单元:

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

Hive 的工作原理

下图描述了 Hive 和 Hadoop 之间的工作流程。

Hive 的工作原理

下表定义了 Hive 如何与 Hadoop 框架交互:

步骤号 操作
1 执行查询

Hive 界面(例如命令行或 Web UI)将查询发送到驱动程序(任何数据库驱动程序,例如 JDBC、ODBC 等)以执行。

2 获取计划

驱动程序借助查询编译器来解析查询,以检查语法和查询计划或查询的要求。

3 获取元数据

编译器将元数据请求发送到 Metastore(任何数据库)。

4 发送元数据

Metastore 将元数据作为响应发送给编译器。

5 发送计划

编译器检查要求并将计划重新发送给驱动程序。到这里,一个查询的解析和编译就完成了。

6 执行计划

驱动程序将执行计划发送给执行引擎。

7 执行作业

在内部,执行作业的过程是一个 MapReduce 作业。执行引擎将作业发送到 Name 节点中的 JobTracker,并将该作业分配给 Data 节点中的 TaskTracker。在这里,查询执行 MapReduce 作业。

7.1 元数据操作

同时在执行过程中,执行引擎可以使用 Metastore 执行元数据操作。

8 获取结果

执行引擎从数据节点接收结果。

9 发送结果

执行引擎将这些结果值发送给驱动程序。

10 发送结果

驱动程序将结果发送给 Hive 接口。