Spark SQL、Hive SQL运行流程解析及对比
目录
- 一、Spark SQL 运行过程详解
- 1. SQL 解析(Parsing)
- 2. 逻辑计划生成(Logical Plan)
- 3. 逻辑计划优化(Logical Optimization)
- 4. 物理计划生成(Physical Planning)
- 5. 代码生成(Code Generation)
- 6. 任务划分与调度(Task Scheduling)
- 7. 执行(Execution)
- 8. 结果返回
- 总结流程图(简化版)
- 额外说明
- 二、Hive 执行流程
- 1.SQL 解析(Parsing)
- 2. 语义分析和逻辑计划生成(Semantic Analysis & Logical Plan)
- 3.逻辑计划优化(Logical Optimization)
- 4. 物理计划生成(Physical Plan)
- 5.作业提交(Job Submission)
- 6.执行(Execution)
- 7. 结果返回
- 二、Hive 与 Spark SQL 执行流程的区别
- 三、总结
- 四、举例对比
Spark SQL 是 Apache Spark 提供的用于 结构化数据处理的模块,它允许 使用 SQL 语句查询数据,同时 支持DataFrame和Dataset API。
一、Spark SQL 运行过程详解
1. SQL 解析(Parsing)
- 用户提交一条 SQL 语句(例如
SELECT * FROM table WHERE id > 10
)。 - Spark SQL 的解析器(Parser)会将 SQL 语句转换成抽象语法树(AST,Abstract Syntax Tree)。
- 解析器会检查 SQL 语法是否正确,如果语法错误会抛出异常。
2. 逻辑计划生成(Logical Plan)
- 解析后的 AST 会被转换成一个未解析的逻辑计划(Unresolved Logical Plan)。
- 这个逻辑计划是对查询的抽象表示,包含了查询的各个操作(如过滤、投影、连接等),但字段和表名还未解析。
- 接下来,Spark 会根据 Catalog(元数据存储,包含表结构、函数信息等)解析表名、列名,生成解析后的逻辑计划(Resolved Logical Plan)。
3. 逻辑计划优化(Logical Optimization)
- 解析后的逻辑计划会被传入 Catalyst 优化器。
- Catalyst 优化器会应用一系列规则(Rule-based Optimizations),例如:
- 常量折叠(Constant Folding):将表达式中常量计算提前。
- 谓词下推(Predicate Pushdown):将过滤条件尽可能早地应用,减少数据量。
- 投影剪裁(Projection Pruning):只读取和处理必要的列。
- 子查询消除、连接重排序等。
- 优化后生成优化的逻辑计划(Optimized Logical Plan)。
4. 物理计划生成(Physical Planning)
- Catalyst 会将优化后的逻辑计划转换成一个或多个物理计划(Physical Plan)。
- 物理计划描述了具体的执行策略,比如使用哪种连接算法(Broadcast Hash Join、Sort Merge Join等)、是否使用缓存等。
- Spark 会根据成本模型(Cost Model)选择最优的物理计划。