Hive 简明教程
Hive - Introduction
“大数据”一词用于海量数据集的集合,包含海量数据、高速和随日益增加的各种数据。使用传统的数据管理系统很难处理大数据。因此,Apache 软件基金会引入了一个称为 Hadoop 的框架来解决大数据管理和处理难题。
Hadoop
Hadoop 是一个开源框架,用于在分布式环境中存储和处理大数据。它包含两个模块,一个是 MapReduce,另一个是 Hadoop 分布式文件系统 (HDFS)。
-
MapReduce: 它是一款并行编程模型,用于在大量的商品硬件集群上处理大量结构化、半结构化和非结构化数据。
-
*HDFS:*Hadoop 分布式文件系统是 Hadoop 框架的一部分,用于存储和处理数据集。它提供了一个基于商品硬件上运行的、容错的文件系统。
Hadoop 生态系统包含不同的子项目(工具),例如 Sqoop、Pig 和 Hive,可用于对 Hadoop 模块提供帮助。
-
Sqoop: 用于在 HDFS 和 RDBMS 之间导入和导出数据。
-
Pig: 是用于为 MapReduce 操作开发脚本的程序语言平台。
-
Hive: 是用于开发 SQL 类型脚本以执行 MapReduce 操作的平台。
Note: 有多种执行 MapReduce 操作的方式:
-
使用 Java MapReduce 程序针对结构化、半结构化和非结构化数据采用的传统方式。
-
使用 Pig 针对结构化和半结构化数据处理 MapReduce 的脚本方式。
-
用于使用 Hive 处理结构化数据的 MapReduce 的 Hive 查询语言(HiveQL 或 HQL)。
What is Hive
Hive 是用于处理 Hadoop 中结构化数据的数据库基础架构工具。它立足于 Hadoop 之上,用于对大数据进行汇总,并使查询和分析变得容易。
Hive 最初由 Facebook 开发,后由 Apache 软件基金会接手并以开源形式进一步开发,名为 Apache Hive。它被不同公司所使用。例如,Amazon 在 Amazon Elastic MapReduce 中使用它。
Features of Hive
-
它将架构存储在数据库中并将经过处理的数据压入 HDFS。
-
它专为 OLAP 而设计。
-
它为查询提供了名为 HiveQL 或 HQL 的 SQL 类型语言。
-
它很熟悉、快速、可扩展且可拓展。
Architecture of Hive
以下组件图解显示了 Hive 的架构:
该组件图解包含不同的单元。下表描述了每个单元:
Unit Name |
Operation |
User Interface |
Hive 是一种数据仓库基础架构软件,它能够在用户和 HDFS 之间创建交互。Hive 支持的用户界面包括 Hive Web UI、Hive 命令行和 Hive HD Insight(在 Windows 服务器中)。 |
Meta Store |
Hive 选择各自的数据库服务器来存储数据库、表中的列、其数据类型和 HDFS 映射的架构或元数据。 |
HiveQL Process Engine |
HiveQL 类似于 SQL,用于查询元数据中的架构信息。它是传统的 MapReduce 程序方法的替代方法之一。我们可以编写 MapReduce 作业和处理它的查询,而不是在 Java 中编写 MapReduce 程序。 |
Execution Engine |
HiveQL 处理引擎和 MapReduce 的结合部分是 Hive 执行引擎。执行引擎处理查询并生成与 MapReduce 结果相同的结果。它使用 MapReduce 的代码风格。 |
HDFS or HBASE |
Hadoop 分布式文件系统或 HBASE 是将数据存储到文件系统中的数据存储技术。 |
Working of Hive
下图描述了 Hive 和 Hadoop 之间的工作流程。
下表定义了 Hive 如何与 Hadoop 框架交互:
Step No. |
Operation |
1 |
*Execute Query*Hive 接口(例如命令行或 Web UI)将查询发送给驱动程序(任何数据库驱动程序,例如 JDBC、ODBC 等)以执行。 |
2 |
*Get Plan*驱动程序在查询编译器的帮助下对查询进行解析,以检查语法和查询计划或查询需求。 |
3 |
*Get Metadata*编译器向元数据存储(任何数据库)发送元数据请求。 |
4 |
*Send Metadata*元数据存储向编译器发送元数据作为响应。 |
5 |
*Send Plan*编译器检查需求并将计划重新发送给驱动程序。到此,查询的解析和编译过程完成。 |
6 |
*Execute Plan*驱动程序将执行计划发送给执行引擎。 |
7 |
*Execute Job*在内部,执行作业的过程是一个 MapReduce 作业。执行引擎将作业发送给 Name 节点中的 JobTracker,它将作业分配给 Data 节点中的 TaskTracker。在此,查询会执行 MapReduce 作业。 |
7.1 |
*Metadata Ops*同时在执行过程中,执行引擎可对元数据存储执行元数据操作。 |
8 |
*Fetch Result*执行引擎从 Data 节点接收结果。 |
9 |
*Send Results*执行引擎将这些结果值发送给驱动程序。 |
10 |
*Send Results*驱动程序将结果发送给 Hive 接口。 |