Hive引擎底层初探
1、什么是Hive
Hive是一个基于Hadoop的数据仓库工具,用于处理和分析大规模结构化数据。Hive提供了类似SQL的查询语言(HiveQL),使得熟悉SQL的用户能够查询数据。Hive将SQL查询转换为MapReduce任务,以在Hadoop集群上执行数据处理和分析。
2、Hive起源
回答这个问题之前,先介绍下Hadoop。Hadoop是专门为离线和大数据分析而设计的分布式基础架构。Hadoop的计算模型是MapReduce,将计算任务分割成多个处理单元,并将其分散到一群家用或服务级别的硬件机器上,从而降低成本。但是直接用MapReduce处理大数据会面临难题:
在此背景下Hive应运而生。Hive是基于Hadoop的一个数据仓库工具,本质是将SQL转换成MapReduce任务进行运算。将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,极大降低用户使用难度。
3、Hive架构
3.1 基本组成部分
Hive的架构是一个复杂的系统,通过用户接口、元数据存储、驱动器和Hadoop集群等多个组件的协同工作,实现了对大规模数据的高效存储和查询处理。其架构图如下图所示。
![](https://s3.cn-north-1.jdcloud-oss.com/shendengbucket1/2024-03-12-19-25szCcWyqGTpb8yiW.png)
这是用户与Hive进行交互的主要方式。Hive提供了多种用户接口,包括CLI(命令行接口)、Client(客户端)、WUI(Web用户界面)以及JDBC/ODBC(允许Java或其他编程语言通过JDBC或ODBC访问Hive)。通过这些接口,用户可以执行HQL(Hive查询语言)语句,进行数据的查询、分析和管理。
BDP平台将页面的SQL转换成SHELL脚本,调用CLI来启动Hive引擎。
![](https://s3.cn-north-1.jdcloud-oss.com/shendengbucket1/2024-03-29-18-37WDorBBgilK9WykL.png)
![](https://s3.cn-north-1.jdcloud-oss.com/shendengbucket1/2024-03-29-18-37zz3tnRB8VmZllH3.png)
Hive是将数据文件映射成一张表,元数据模块主要负责描述和管理数据存储、表结构、分区信息等,通常存储在关系型数据库中,如MySQL或Derby。
![](https://s3.cn-north-1.jdcloud-oss.com/shendengbucket1/2024-03-29-18-37ecLHTJvPOYAD0a6.png)
驱动器是Hive的核心组件,主要作用是将HiveQL语句转换成一系列的MapReduce(MR)作业。驱动器中包含了解析器、编译器、优化器和执行器等多个子组件。解析器将用户的HQL查询语句转换为抽象语法树(AST),编译器将AST编译成逻辑执行计划,优化器对逻辑计划进行优化,最后执行器将优化后的计划转换成可以运行的物理计划并执行。
![](https://s3.cn-north-1.jdcloud-oss.com/shendengbucket1/2024-03-29-18-38xx303LPrZXasBIF.png)
Hive是建立在Hadoop上的数据仓库基础构架,因此Hadoop集群是Hive架构的重要组成部分。Hive使用Hadoop的分布式文件系统(HDFS)进行数据存储,利用Hadoop的MapReduce框架进行大规模数据的计算和处理。
3.2 Hadoop
Hadoop是开源的分布式存储和计算系统,旨在处理大规模数据集。它最初由Apache软件基金会开发,现已成为处理大数据的行业标准之一。Hadoop主要包括以下核心组件:HDFS、MapReduce。
3.2.1 分布式文件系统(HDFS)
HDFS是Hadoop的分布式文件系统,用于存储大规模数据集。它将数据分布存储在集群中的多台服务器上,通过数据冗余存储来提供容错性和高可靠性。
HDFS它将文件数据划分为多个数据块,并在集群中的多个节点上进行复制存储。每个数据块默认会有多个(通常是三个)副本存储在不同的节点上。这种冗余存储机制确保了即使某个节点或副本发生故障,数据仍然可以从其他副本中恢复,从而保证了数据的高可靠性。
HDFS采用了主从架构,包括一个NameNode和多个DataNode。NameNode负责管理文件系统的命名空间和元数据信息,而DataNode负责存储实际的数据块。
![](https://s3.cn-north-1.jdcloud-oss.com/shendengbucket1/2024-03-12-19-26rGTRSX3C25YbRQT7.png)
3.2.2 分布式计算框架(MapReduce)
MapReduce是Hadoop的分布式计算框架,用于在大规模数据集上执行并行计算任务。它将计算任务分解为多个独立的子任务,然后在集群中的多台计算节点上并行执行这些子任务。MapReduce包括Map阶段和Reduce阶段 ,2个阶段。
![](https://s3.cn-north-1.jdcloud-oss.com/shendengbucket1/2024-03-12-19-26MOJ7wbmy55GJzpAQ.png)
4、Hive工作流程
Hive是一个建立在Hadoop之上的数据仓库系统,它提供了类似于SQL的查询语言(HiveQL),使用户可以在大规模数据集上执行查询和分析操作。下面是Hive的工作流程:
![](https://s3.cn-north-1.jdcloud-oss.com/shendengbucket1/2024-03-12-19-27H27770G8Ym8zFNpg.png)