简介

hive 是一个建立在Hadoop生态之上的数据仓库软件.

主要目的和功能是: 让用户能够通过以类SQL语法的形式方便的读取,写入和管理存储在HDFS上的海量数据.

可以理解为hive可以将sql 翻译成底层的MapReduce 或Spark任务 进行执行 大大提高了开发效率

体系结构分析:

一、整体架构分层

Hive的体系结构从上至下可分为用户接口层服务层执行引擎层存储层,各层级职责清晰、松耦合,确保架构的灵活性和可扩展性,同时实现了“计算与存储分离”的核心特性——Hive专注于查询处理和计算逻辑,数据则持久化存储在底层分布式存储系统中。

二、各层级核心组件详解

(一)用户接口层:交互入口

用户接口层为不同使用场景提供多样化的交互方式,是用户操作Hive的入口,主要包含以下3种核心接口:

  • CLI(命令行接口):最常用的交互方式,启动时会运行一个Hive实例,用户可直接输入HiveQL语句执行查询、建表等操作,适合本地交互式调试和简单任务处理。早期CLI已逐步被beeline替代,beeline是基于SQLLine的纯JDBC命令行客户端,兼容性和安全性更优。

  • JDBC/ODBC接口:允许Java应用程序或其他支持ODBC协议的工具(如Tableau、DBeaver,Datagrip等)通过标准数据库连接方式与Hive交互,实现程序化调用Hive功能,适用于企业级应用集成场景。

  • Web UI(网页接口):Hive自带简单的Web界面(HWI),或通过Hue等开源工具提供图形化操作界面,用户可通过浏览器执行查询、查看任务状态、管理元数据,适合非命令行操作场景的用户使用。

(二)服务层:核心处理中枢

服务层是Hive的核心处理部分,负责接收用户请求、解析处理查询、协调整个执行流程,核心组件包括Driver、Metastore和HiveServer2,其中Driver和Metastore是整个架构的核心。

1. Driver(驱动器)

Driver是Hive的“大脑”,负责协调查询的全生命周期,接收用户提交的HiveQL查询后,完成解析、编译、优化和执行计划生成,具体包含5个子组件:

  • Parser(解析器):对输入的HiveQL字符串进行词法分析和语法分析,生成抽象语法树(AST),校验语法的正确性,若存在语法错误则直接返回提示。

  • Semantic Analyzer(语义分析器):结合Metastore中的元数据,验证AST的语义正确性,比如检查表、列是否存在、数据类型是否匹配、权限是否合法等。

  • Logical Plan Generator(逻辑计划生成器):将验证通过的AST转换为逻辑执行计划(由操作符组成的有向无环图DAG),描述查询的逻辑操作步骤(如过滤、连接、分组等)。

  • Optimizer(优化器):对逻辑执行计划进行优化,通过谓词下推、分区剪裁、列剪裁、连接重排序、MapJoin优化等规则,减少数据处理量,提升查询效率,生成更高效的优化后逻辑计划。

  • Physical Plan Generator(物理计划生成器):将优化后的逻辑计划转换为物理执行计划,指定具体的执行方式和使用的执行引擎(如MapReduce、Tez、Spark),生成可执行的分布式任务。

2. Metastore(元数据存储)

Metastore是Hive的“数据字典”,负责存储所有Hive相关的元数据,是Hive正常运行的基础——没有Metastore,Hive无法识别表结构、数据位置等信息,无法执行任何DDL或DML操作。其核心构成和特性如下:

  • 存储内容:包括数据库信息(名称、位置)、表信息(名称、列定义、分区字段、存储格式、SerDe序列化/反序列化类、HDFS路径)、分区信息(分区键值、对应数据路径)、索引信息、权限信息等。

  • 核心构成:分为Metastore Service(提供元数据访问接口)、Metastore Database(实际存储元数据的数据库)、Metastore Client(内嵌在Hive服务中,用于与Metastore Service通信)三部分。

  • 存储后端:默认使用内嵌的Derby数据库(仅适用于单用户测试环境),生产环境中通常使用独立的关系型数据库(如MySQL、PostgreSQL),支持多客户端共享元数据,提升可用性和并发能力。

  • 部署模式:支持嵌入式模式(元数据与Hive服务同进程,适用于开发测试)和远程模式(独立部署Metastore服务,支持多客户端共享,生产环境推荐)。

3. HiveServer2(远程客户端连接的关键)

HiveServer2是Hive的核心服务,替代了早期单线程的HiveServer,支持多线程、会话管理和安全认证(如LDAP、Kerberos),所有远程客户端(如JDBC、ODBC、beeline)的请求均通过HiveServer2接收和处理,实现了客户端与服务端的解耦,支持高并发访问。

(三)执行引擎层:任务执行载体

执行引擎层负责执行Driver生成的物理执行计划,将任务提交到底层计算框架,完成分布式数据处理,Hive支持多种可插拔的执行引擎,用户可根据需求灵活切换,各引擎特点对比如下:

执行引擎

核心特点

适用场景

MapReduce

稳定可靠,兼容性强,中间结果写入磁盘,延迟较高

传统批处理任务,对延迟要求不高的场景

Tez

基于DAG模型,消除MapReduce的多次磁盘读写开销,性能优于MapReduce

大多数批处理场景,Hive 4.x默认推荐引擎

Spark

基于内存计算,支持DAG优化,速度快,支持交互式查询和迭代计算

交互式查询、迭代计算、对性能要求较高的场景

用户可通过set hive.execution.engine=tez;(切换为Tez引擎)等命令切换执行引擎,适配不同的业务需求。

(四)存储层:数据持久化载体

Hive本身不负责数据存储,而是依赖分布式存储系统存储实际数据,核心依赖Hadoop生态的HDFS,同时支持HBase、S3等其他存储系统,实现数据的高可用、高容错和可扩展存储。

  • HDFS(核心存储):Hive表的实际数据均存储在HDFS上,Hive通过Metastore中的元数据管理数据在HDFS上的组织方式(如目录结构、文件格式),数据以文件形式存储,支持多种格式(TextFile、ORC、Parquet、SequenceFile等),其中ORC、Parquet等列式存储格式因压缩效率高、查询性能优,在生产环境中广泛使用。

  • 辅助存储:HBase适用于实时查询场景,可与Hive集成实现实时与离线分析结合;S3适用于云原生场景,支持Hive在云环境中的部署和数据存储。

三、核心依赖:Hadoop生态

Hive是构建在Hadoop之上的工具,其运行依赖Hadoop的两个核心组件,二者缺一不可:

  • HDFS:提供分布式数据存储能力,承担Hive表数据的持久化存储,通过多副本机制保证数据高可用和容错性。

  • YARN:负责集群资源管理和任务调度,当执行引擎为MapReduce、Tez时,Hive将任务提交给YARN,由YARN分配计算资源、调度任务执行,确保分布式任务的高效运行。

四、核心架构特点与数据流程

(一)核心架构特点

  • Schema-on-Read(读时模式):与传统数据库的“写时模式”不同,Hive在数据写入时不强制校验格式,仅在查询读取时根据Metastore中的元数据解释数据格式,灵活性高,数据加载速度快,但要求数据格式与元数据定义匹配。

  • 计算与存储分离:Hive专注于查询处理和计算逻辑,数据存储依赖HDFS等分布式存储,便于独立扩展计算或存储资源,适配海量数据处理场景。

  • 执行引擎可插拔:支持MapReduce、Tez、Spark等多种执行引擎,可根据业务需求灵活切换,平衡性能与兼容性。

  • 高扩展性:依托Hadoop集群的横向扩展能力,可轻松处理PB级数据,同时支持自定义函数、自定义SerDe等,适配复杂业务场景。

(二)典型数据处理流程

Hive的一次查询执行流程清晰,各组件协同完成数据处理,具体步骤如下:

  1. 用户通过CLI、JDBC等接口提交HiveQL查询,请求被HiveServer2接收(远程访问场景)或直接提交给Driver(本地场景)。

  2. Driver中的解析器、语义分析器依次对查询进行解析和语义验证,结合Metastore获取表结构、数据位置等元数据。

  3. 逻辑计划生成器生成逻辑执行计划,优化器对其进行优化,物理计划生成器将优化后的逻辑计划转换为物理执行计划,指定执行引擎。

  4. 执行引擎将物理计划提交给YARN,由YARN分配资源并调度任务执行,任务从HDFS读取数据进行计算。

  5. 计算完成后,结果要么写回HDFS(如INSERT操作),要么通过Driver、HiveServer2返回给用户。

五、架构演进补充

Hive的架构在版本迭代中不断优化,核心演进方向聚焦于性能提升和功能完善:

  • LLAP(长期运行的分析处理服务):Hive 2.0引入,通过内存缓存元数据和热数据,与执行引擎紧密集成,显著提升交互式查询性能。

  • ACID事务支持:从Hive 0.14开始引入,在Hive 3.x、4.x中逐步完善,支持INSERT、UPDATE、DELETE等事务操作,主要针对ORC格式表,提升数据仓库场景的适用性。

  • Hive on Spark深度集成:进一步优化与Spark引擎的集成,充分利用Spark的内存计算优势,提升查询性能和并发处理能力。

更多推荐