Spark SQL、Hive SQL运行流程解析及对比

发布于:2025-05-23 ⋅ 阅读:(27) ⋅ 点赞:(0)


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)选择最优的物理计划

5. 代码生成(Code Generation)


    网站公告

    今日签到

    点亮在社区的每一天
    去签到