一 概念

Apache Hive 是一个构建在 Hadoop集群 之上的​​数据仓库工具​​。它提供了一种类似于 SQL 的查询语言,称为 ​​HiveQL (HQL)​​,允许熟悉 SQL 的用户对存储在 Hadoop 分布式文件系统 (HDFS) 中的大规模数据集进行查询、汇总和分析。

其核心思想是:​​将结构映射到数据上​​。用户通过定义表结构(Schema)来映射 HDFS 上的文件,然后就可以使用 HQL 进行查询。Hive 会将 HQL 查询转换成一个或多个 MapReduce、Tez 或 Spark 作业在 Hadoop 集群上执行。

​​简单来说,Hive 就是一个 SQL 到 MapReduce/Tez/Spark 的翻译器。​

二 Hive架构

在这里插入图片描述

1.​​用户接口 (CLI, JDBC/ODBC, Web UI)​​:提供多种方式供用户与 Hive 交互,提交查询。

2.​​元存储 (Metastore)​​:这是 Hive 的​​核心​​,存储着所有表的结构信息(如表名、列名、数据类型、分区信息、表数据所在的 HDFS 目录等)。通常使用关系型数据库(如 MySQL, PostgreSQL)来存储这些元数据,而不是 HDFS。

3.​​驱动器 (Driver)​​:

•解析器 (Parser)​​:解析 HQL 查询,检查语法和语义。

•​​编译器 (Compiler)​​:将 HQL 查询编译成一个由 MapReduce/Tez/Spark 任务组成的执行计划。

•优化器 (Optimizer)​​:对执行计划进行优化(如谓词下推:把过滤操作提前,减少计算的数据量、join 优化等)。

•​​执行器 (Executor)​​:将优化后的执行计划提交给 Hadoop 执行。

4.​​执行引擎​​:早期默认是 MapReduce,但现在更常用的是 ​​Tez​​ 或 ​​Spark​​,它们能提供更好的性能(如减少延迟、优化复杂查询的 DAG)。

5.Hadoop​​:Hive 的数据存储在 HDFS 上,计算任务在 YARN 上调度和执行。

​​工作流程​​:用户通过 CLI 提交一条 HQL -> Driver 接收 -> Parser 解析 -> Compiler 向 Metastore 获取元信息并编译成执行计划 -> Optimizer 优化 -> Executor 将任务提交给执行引擎(如 Tez)-> Tez 在 YARN 上执行 -> 从 HDFS 读取数据 -> 返回结果。

三 Hive 核心进程

Hive 本身通常不是一个长时间运行的服务(尤其是在使用 CLI 模式时)。但其依赖的 Metastore 服务是关键。

​​HiveServer2 (HS2) ​​:一个长期运行的服务,允许远程客户端(如 JDBC, ODBC, Beeline)提交查询并获取结果。它是多线程的,支持并发查询,比旧的 HiveServer1 更强大。

•MetaStore Server​​:一个独立的 Thrift 服务,用于管理 Hive 的元数据。将 Metastore 作为独立服务运行,允许多个 Hive 会话或其他组件(如 Spark、Impala)共享同一份元数据,避免了每个客户端都直接连接元数据库。

在生产环境中,通常会部署 HiveServer2和 MetaStore Server这两个关键服务。

四 优缺点

在这里插入图片描述

五 面试题

1 4个by 排序的区别?

  1. 全局排序(Order By):全局排序,只有一个Reduce。
  2. 每个Reduce内部排序(Sort By):Sort by为每个reduce产生一个排序文件。每个Reduce内部进行排序,对全局结果集来说不是排序。
  3. 分区(Distribute By):有些情况下,我们需要控制某个特定行应该到哪个Reducer,通常是为了进行后续的聚集操作。distribute by子句可以做这件事。distribute by类似MapReduce中partition(自定义分区),进行分区,结合sort by使用。
    对于distribute by进行测试,一定要分配多reduce进行处理,否则无法看到distribute by的效果。
  4. 分区排序(Cluster By):当distribute by和sort by字段相同时,可以使用cluster by方式。
    cluster by除了具有distribute by的功能外还兼具sort by的功能。但是排序只能是升序排序,不能指定排序规则为asc或者desc。
Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐