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


所有评论(0)