Hive 执行流程详解
Hive 是一个基于 Hadoop 的数据仓库工具,它提供了类似 SQL 的查询语言 HiveQL。以下是 Hive 查询执行的完整流程:
1. 查询提交阶段
- 用户通过 CLI、JDBC/ODBC 或 Web UI 提交 HiveQL 查询
- Hive 接收到查询请求后,将其传递给 Driver
2. 解析与编译阶段
a. 解析器(Parser)处理
- 将 HiveQL 查询字符串转换为抽象语法树(AST)
- 检查语法错误和基本语义错误
b. 语义分析器(Semantic Analyzer)处理
- 验证表名、列名等元数据信息
- 检查数据类型兼容性
- 执行隐式类型转换
c. 逻辑计划生成
- 将 AST 转换为逻辑执行计划(Operator Tree)
- 应用优化规则(谓词下推、列裁剪等)
d. 优化器(Optimizer)处理
- 对逻辑计划进行优化:
- 谓词下推(Predicate Pushdown)
- 分区裁剪(Partition Pruning)
- 连接优化(Join Reordering)
- 映射端聚合(Map-side Aggregation)
3. 物理计划生成
a. 任务编译器(Task Compiler)
- 将优化后的逻辑计划转换为物理执行计划
- 确定执行引擎(MapReduce/Tez/Spark)
b. 执行计划生成
- 生成 DAG(有向无环图)形式的执行计划
- 对于 MapReduce 引擎:
- 将查询分解为 Map、Reduce 等阶段
- 确定 shuffle、sort 等操作
4. 执行阶段
a. 资源申请
- 与 YARN 资源管理器通信申请资源
- 获取必要的容器(Container)来运行任务
b. 任务执行
- 对于 MapReduce 引擎:
- 启动 MapTask 和 ReduceTask
- 执行数据读取、处理、写入操作
- 对于 Tez/Spark 引擎:
- 按照 DAG 执行各个任务节点
c. 数据流处理
- 从 HDFS 读取输入数据
- 执行过滤、转换、聚合等操作
- 将结果写回 HDFS 或临时存储
5. 结果返回阶段
- 收集各个任务的执行结果
- 对最终结果进行合并(如需要)
- 将结果返回给客户端
执行引擎对比
| 阶段 | MapReduce 引擎 | Tez/Spark 引擎 |
|---|---|---|
| 执行模型 | 严格的 Map-Shuffle-Reduce 阶段 | 灵活的 DAG 执行模型 |
| 中间数据 | 必须写入磁盘 | 可内存缓存 |
| 任务启动开销 | 高(每个阶段独立 JVM) | 低(复用容器) |
| 适合场景 | 批处理、大规模数据 | 交互式查询、复杂 DAG |
性能优化要点
- 分区和分桶:合理设计分区和分桶策略
- 文件格式:使用 ORC、Parquet 等列式存储
- 压缩:启用中间数据压缩
- 并行度:合理设置 reduce 任务数量
- JVM 重用:减少任务启动开销
Hive 的这种执行流程使得非专业程序员也能利用 Hadoop 生态系统处理大规模数据,同时通过优化器自动应用多种查询优化技术。

69

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



