Hive基础教程
Apache Hive 教程
资料来源: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的架构示意图如下:
这个组件图包含不同的单元。各单元介绍如下表:
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之间的工作流程如下图所示。
下表定义了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接口。 |