Hive 简介
“大数据”一词用于指代包含巨大容量、高速度、以及不断增长的各类型数据的大型数据集合。传统数据管理系统难以处理大型数据。因此,Apache软件基金会推出了一个称为Hadoop的框架来解决大型数据管理和处理的挑战。
阅读更多:Hive 教程
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的脚本方法处理结构化和半结构化数据。
- 使用Hive的Hive查询语言(HiveQL或HQL)处理结构化数据的MapReduce操作。
什么是Hive
Hive是一个数据仓库基础设施工具,用于在Hadoop中处理结构化数据。它依赖于Hadoop来总结大数据并使查询和分析变得容易。
最初Hive是由Facebook公司开发的,后来Apache软件基金会接手并在名为Apache Hive的开源项目下进一步开发它。它被不同的公司使用。例如,亚马逊公司在亚马逊弹性MapReduce中使用它。
Hive不是
- 不是关系数据库
- 不是面向在线事务处理(OLTP)的设计
- 不是用于实时查询和行级更新的语言
Hive的功能
- 将模式存储在数据库中,并将处理后的数据放入HDFS中。
- 设计用于联机分析处理(OLAP)。
- 它提供了用于查询的SQL类型语言,称为HiveQL或HQL。
- 熟悉、快速、可扩展和可扩展性。
Hive的架构
以下组件图示展示了Hive的架构:
这个组件图包含不同的单元。以下表格描述了每个单元:
单元名称 | 操作 |
---|---|
用户界面 | Hive是一种数据仓库基础设施软件,可以创建用户和HDFS之间的交互。Hive支持的用户界面包括Hive Web UI、Hive命令行和Hive HD Insight(在Windows服务器上)。 |
元数据存储 | Hive选择相应的数据库服务器来存储表、数据库、表中列的模式或元数据,它们的数据类型和HDFS映射。 |
HiveQL处理引擎 | HiveQL类似于用于在元数据存储中查询模式信息的SQL。它是传统MapReduce程序的替代方案之一。我们可以编写MapReduce作业的查询并处理它,而不是在Java中编写MapReduce程序。 |
Execution引擎 | HiveQL处理引擎和MapReduce的联合部分是Hive Execution引擎。执行引擎处理查询并生成与MapReduce结果相同的结果。它使用MapReduce的风格。 |
HDFS或HBASE | Hadoop分布式文件系统或HBASE是将数据存储到文件系统中的数据存储技术。 |
Hive的工作方式
以下图表描述了Hive和Hadoop之间的工作流程。
以下表格定义了Hive如何与Hadoop框架交互:
步骤编号 | 操作 |
---|---|
1 | 执行查询 Hive接口(如命令行或Web UI)将查询发送到驱动程序(任何数据库驱动程序例如JDBC,ODBC等)以执行。 |
2 | 获取计划 驱动程序借助查询编译器解析查询以检查语法和查询计划或查询要求。 |
3 | 获取元数据 编译器向元数据存储(任何数据库)发送元数据请求。 |
4 | 发送元数据 元数据存储将元数据作为响应发送到编译器。 |
5 | 发送计划 编译器检查要求并重新将计划发送给驱动程序。至此,查询的解析和编译完成。 |
6 | 执行计划 驱动程序将执行计划发送到执行引擎。 |
7 | 执行作业 在内部,执行作业的过程是一个MapReduce作业。执行引擎将作业发送到Name节点中的JobTracker,Name节点分配此作业到Data节点中的TaskTracker。在这里,查询执行MapReduce作业。 |
7.1 | 元数据操作 同时,在执行过程中,执行引擎可以使用元数据存储执行元数据操作。 |
8 | 获取结果 执行引擎从Data节点接收结果。 |
9 | 发送结果 执行引擎将这些结果值发送给驱动程序。 |
10 | 发送结果 驱动程序将结果发送给Hive界面。 |