Hive 的软件架构是一个经典的客户端-服务端模型,核心设计理念是将 HiveQL (类 SQL 查询语言) 转换成底层的计算框架任务(如 MapReduce, Tez, Spark),并在 Hadoop 分布式文件系统 (HDFS) 上执行。它的主要目标是提供数据摘要、查询和分析能力,同时隐藏了底层分布式计算的复杂性。
以下是 Hive 的关键组件及其交互关系:
-
用户接口/客户端:
- CLI: 命令行界面,最基础直接的交互方式。
- JDBC/ODBC: 提供 Java 数据库连接和开放数据库连接标准接口,允许应用程序(如 BI 工具:Tableau, Power BI)连接 Hive。
- Hue: 基于 Web 的图形用户界面,常用于 Hadoop 生态系统,包含 Hive 编辑器。
- Web UI: Hive 2.x 之后提供了基础的 Web 界面(通常运行在端口 10002)来提交查询和监控作业。
- Thrift Server: 允许不同编程语言的客户端通过 Thrift RPC 协议与 Hive 交互。
-
Hive 驱动:
- 这是 Hive 的核心组件,负责接收客户端提交的查询请求(HiveQL 或命令),并协调整个查询生命周期。它包含几个关键子组件:
- 解析器: 对输入的 HiveQL 字符串进行词法分析、语法分析,生成抽象语法树。
- 语义分析器/类型检查器: 检查 AST 中的语义正确性(如表、列是否存在,数据类型是否匹配),并利用 Metastore 中的元数据进行验证。
- 逻辑计划生成器: 将经过验证的 AST 转换成逻辑执行计划(一个由操作符树组成的 DAG - 有向无环图)。这些操作符代表关系代数操作(如
Filter,Join,Group By,Select)。 - 优化器: 对逻辑计划应用一系列优化规则(如谓词下推、列剪裁、分区剪裁、Join 优化、MapJoin 优化等),生成更高效的优化后的逻辑计划。
- 物理计划生成器: 将优化后的逻辑计划转换成物理执行计划。这个计划指定了如何执行每个逻辑操作符,以及使用哪种计算引擎(MapReduce, Tez, Spark)。它生成一个由物理操作符组成的 DAG。
- 执行引擎: 负责执行物理计划。它:
- 将物理计划 DAG 提交给底层的计算框架(如 YARN 来调度 MapReduce 或 Tez 作业)。
- 与计算框架(如 MapReduce 或 Tez)交互,监控作业执行状态。
- 收集最终结果并返回给客户端。
- Hive 执行引擎选项:
- MapReduce: 传统的、最兼容但通常较慢的引擎。
- Tez: 基于 DAG 的引擎,避免了 MapReduce 的多次读写磁盘开销,性能显著优于 MR,是 Hive 推荐的默认引擎。
- Spark: 使用 Apache Spark 作为执行引擎,利用其内存计算和 DAG 优化能力,提供高性能,尤其适合迭代和交互式查询。
- 这是 Hive 的核心组件,负责接收客户端提交的查询请求(HiveQL 或命令),并协调整个查询生命周期。它包含几个关键子组件:
-
元存储:
- 这是 Hive 的核心系统目录,存储所有 Hive 的元数据。
- 存储内容: 数据库、表、列及其类型的信息、表的分区信息、表数据所在的 HDFS 目录位置、表的存储格式(如 TextFile, ORC, Parquet)、表的属性(如
serde)、视图信息、权限信息等。 - 重要性: 解耦了元数据与计算,使得多个 Hive 会话(甚至其他工具如 Spark SQL, Impala, Presto)可以共享同一份元数据定义。没有 Metastore,Hive 无法工作。
- 后端存储: 通常使用关系型数据库(如 MySQL, PostgreSQL)作为 Metastore 的持久化存储。Hive 自带 Derby 数据库,但仅适用于单用户测试环境,生产环境必须使用独立的 RDBMS。
-
Hadoop 核心:
- Hadoop 分布式文件系统: Hive 表数据最终存储在 HDFS 上。Hive 不管理数据存储本身,而是管理数据在 HDFS 上的组织方式(目录结构)和元数据。
- YARN: Hadoop 的资源管理和作业调度框架。当使用 MapReduce 或 Tez 作为执行引擎时,Hive 将作业提交给 YARN 来分配集群资源并执行计算任务。
数据流概览:
- 用户通过 CLI/JDBC/ODBC/WebUI 等接口提交 HiveQL 查询。
- 驱动接收查询。
- 解析器进行词法语法分析,生成 AST。
- 语义分析器结合 Metastore 中的元数据验证查询语义。
- 逻辑计划生成器创建逻辑执行计划。
- 优化器优化逻辑计划。
- 物理计划生成器将优化后的逻辑计划转换为特定执行引擎(MR/Tez/Spark)的物理计划。
- 执行引擎将物理计划提交给底层的计算框架(通过 YARN)。
- 计算框架(MR/Tez/Spark)在 YARN 管理下,从 HDFS 读取输入数据。
- 计算框架执行任务,处理数据。
- 计算结果写回 HDFS(对于
INSERT等操作)或返回给执行引擎(对于SELECT查询)。 - 执行引擎将最终结果返回给用户接口/客户端。
关键架构特点:
- Schema-on-Read: 与传统数据库的 Schema-on-Write 不同,Hive 在数据写入时不强制校验,而是在查询读取时根据 Metastore 中的元数据解释数据格式。这提供了极大的灵活性,但也要求数据格式与元数据定义匹配。
- 计算与存储分离: Hive 专注于查询处理和计算逻辑,数据持久化存储在 HDFS 上。
- 元数据独立: Metastore 作为独立服务存在,支持多客户端共享和高可用。
- 执行引擎可插拔: 支持 MapReduce, Tez, Spark 等多种执行引擎,适应不同性能需求。
- 可扩展性: 可以处理 PB 级别的数据,利用 Hadoop 集群的横向扩展能力。
演进:
- LLAP: Hive 2.0 引入了 LLAP,它是一个长期运行的服务进程,缓存元数据和热数据在内存中,并与执行引擎紧密集成,显著提升了交互式查询的性能。
- Hive on Spark: 更深度地集成 Spark 作为执行引擎,利用 Spark 的内存计算优势。
- ACID 事务支持: Hive 0.14 开始支持有限的 ACID 事务(INSERT, UPDATE, DELETE),主要针对 ORC 格式的表,增强了其在数据仓库场景下的能力(如缓慢变化维处理)。
总而言之,Hive 的架构巧妙地利用 Hadoop 的存储和计算能力,通过 Metastore 管理元数据,将类 SQL 查询转换成分布式计算任务,为大数据分析提供了一个强大且熟悉的接口。
1837

被折叠的 条评论
为什么被折叠?



