Hive 引擎底层初探
1、什么是 Hive
2、Hive 起源
回答这个问题之前,先介绍下 Hadoop。Hadoop 是专门为离线和大数据分析而设计的分布式基础架构。Hadoop 的计算模型是 MapReduce,将计算任务分割成多个处理单元,并将其分散到一群家用或服务级别的硬件机器上,从而降低成本。但是直接用 MapReduce 处理大数据会面临难题:•MapReduce 开发需要具备较高的底层细节知识,开发难度大,学习成本高•使用 MapReduce 框架开发,项目周期长,成本高
3、Hive 架构 3.1 基本组成部分
Hive 的架构是一个复杂的系统,通过用户接口、元数据存储、驱动器和 Hadoop 集群等多个组件的协同工作,实现了对大规模数据的高效存储和查询处理。其架构图如下图所示。
•用户接口模块
这是用户与 Hive 进行交互的主要方式。Hive 提供了多种用户接口,包括 CLI(命令行接口)、Client(客户端)、WUI(Web 用户界面)以及 JDBC/ODBC(允许 Java 或其他编程语言通过 JDBC 或 ODBC 访问 Hive)。通过这些接口,用户可以执行 HQL(Hive 查询语言)语句,进行数据的查询、分析和管理。
BDP 平台将页面的 SQL 转换成 SHELL 脚本,调用 CLI 来启动 Hive 引擎。
•元数据模块
•驱动器(Driver)
•Hadoop 集群
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 架构
HDFS 采用了主从架构,包括一个 NameNode 和多个 DataNode。NameNode 负责管理文件系统的命名空间和元数据信息,而 DataNode 负责存储实际的数据块。◦读取文件的过程:1.客户端向 NameNode 请求获取文件,并对请求进行检查。2.如果请求检查通过,NameNode 将查询元数据,向客户端返回文件所在的各个 Block 的 DN 地址。3.客户端拿到 DN 列表之后,按照 Block,根据负载规则请求一台服务器,建立通道读取数据。4.DN 接收到请求后,向客户端传输 Block 内容。5.获取到的内容,存入本地缓存,然后写入到输出目标中。
3.2.2 分布式计算框架(MapReduce)
MapReduce 是 Hadoop 的分布式计算框架,用于在大规模数据集上执行并行计算任务。它将计算任务分解为多个独立的子任务,然后在集群中的多台计算节点上并行执行这些子任务。MapReduce 包括 Map 阶段和 Reduce 阶段 ,2 个阶段。◦Map 阶段将原始数据分解为更小的数据单元,这些单元可以被并行处理,且彼此之间没有太多依赖。◦Reduce 阶段则对 Map 阶段生成的中间结果进行汇总,以得到最终的处理结果。
4、Hive 工作流程
1.解析 HiveSQL:◦当用户提交一个 HiveSQL 查询时,Hive 的解析器首先会解析这个查询,将其转换成一个抽象语法树(AST)。◦解析器会检查 SQL 语法的正确性,并将 SQL 语句的各个部分(如 SELECT、FROM、WHERE 等)转换为相应的内部表示。2.语义分析:◦语义分析阶段会检查查询的语义正确性,确保所有引用的表、列和函数都存在且有效。◦在这个阶段,Hive 还会获取表的元数据,如列的数据类型、表的分区信息等,为后续的计划生成做准备。3.生成逻辑执行计划:◦接下来,Hive 会根据解析和语义分析的结果,生成一个逻辑执行计划。这个计划描述了查询的执行步骤,但不涉及具体的物理操作。◦逻辑计划通常包括一系列的操作,如扫描表、过滤数据、聚合数据等。4.逻辑计划优化:◦在生成逻辑计划后,Hive 会对其进行优化,以提高查询的执行效率。◦优化可能包括重写查询、消除冗余操作、选择更有效的连接策略等。5.生成物理执行计划:◦优化后的逻辑计划会被转换为物理执行计划。物理计划描述了如何在 Hadoop 集群上实际执行查询。◦在这个阶段,Hive 会决定将哪些操作映射到 MapReduce 任务上,以及如何在集群中分配这些任务。6.执行 MapReduce 任务:◦根据物理执行计划,Hive 会启动 MapReduce 任务来执行查询。任务读取的数据来自 HDFS。◦Map 阶段通常负责读取数据并进行一些基本的处理,如过滤和转换。◦Reduce 阶段则负责聚合数据并生成最终结果。7.返回结果:◦当所有 MapReduce 任务完成后,Hive 会收集并整理结果,然后将其返回给用户。
版权声明: 本文为 InfoQ 作者【京东科技开发者】的原创文章。
原文链接:【http://xie.infoq.cn/article/6c5b13d4b1c8a6894ff8a3d57】。文章转载请联系作者。
评论