SparkSQL底层执行的原理详解(面试必备)

1. RDD 和 SparkSQL 运行时的区别

查看执行计划----------------------explain

  • RDD的运行流程
    在这里插入图片描述

  • SparkSQL程序运行流程
    在这里插入图片描述
    和 RDD 不同, SparkSQL 的 Dataset 和 SQL 并不是直接生成计划交给集群执行, 而是经过了一个叫做 Catalyst 的优化器, 这个优化器能够自动帮助开发者优化代码
    也就是说, 在 SparkSQL 中, 开发者的代码即使不够优化, 也会被优化为相对较好的形式去执行

  • 为什么 SparkSQL 提供了这种能力?
    首先, SparkSQL 大部分情况用于处理结构化数据和半结构化数据, 所以 SparkSQL 可以获知数据的 Schema, 从而根据其 Schema 来进行优化

2.Catalyst优化器

简介: Spark SQL的核心是Catalyst优化器,它以一种新颖的方式利用高级编程语言功能(例如Scala的模式匹配和quasiquotes)来构建可扩展的查询优化器
在这里插入图片描述
SparkSQL的Catalyst优化器是整个SparkSQL pipeline的中间核心部分,其执行策略主要两方向:

  1. 基于规则优化/Rule Based Optimizer/RBO
  2. 基于代价优化/Cost Based Optimizer/CBO

在这里插入图片描述

为了解决过多的依赖Hive的问题,SparkSQL引入了一个优化器 Catalyst, 整个 SparkSQL 的架构大致如下:
在这里插入图片描述
1.API 层简单的说就是 Spark 会通过一些 API 接受 SQL 语句
2.收到 SQL 语句以后, 将其交给 Catalyst, Catalyst 负责解析 SQL, 生成执行计划等
3.Catalyst 的输出应该是 RDD 的执行计划
4.最终交由集群运行

具体流程:
在这里插入图片描述
Step 1 : 解析 SQL, 并且生成 AST (抽象语法树)
在这里插入图片描述
Step 2 : 在 AST 中加入元数据信息, 做这一步主要是为了一些优化, 例如 col = col 这样的条件, 下图是一个简略图, 便于理解
在这里插入图片描述
Step 3 : 对已经加入元数据的 AST, 输入优化器, 进行优化, 从两种常见的优化开始, 简单介绍:
在这里插入图片描述
Step 4 : 上面的过程生成的 AST 其实最终还没办法直接运行, 这个 AST 叫做 逻辑计划, 结束后, 需要生成 物理计划, 从而生成 RDD 来运行

在生成物理计划的时候, 会经过成本模型对整棵树再次执行优化, 选择一个更好的计划
在生成物理计划以后, 因为考虑到性能, 所以会使用代码生成, 在机器中运行
可以使用 queryExecution 方法查看逻辑执行计划, 使用 explain 方法查看物理执行计划
在这里插入图片描述
也可以使用 Spark WebUI 进行查看
在这里插入图片描述
总结:
Catalyst 的主要运作原理是分为三步, 先对 SQL 或者 Dataset 的代码解析, 生成逻辑计划, 后对逻辑计划进行优化, 再生成物理计划, 最后生成代码到集群中以 RDD 的形式运行

3.面试中如何回答?

在这里插入图片描述

  • 1-首先SaprkSQL底层解析成RDD,通过两个阶段RBO和CBO
  • 2-RBO就是通过逻辑执行计划通过常见的优化达到优化逻辑执行计划
  • 3-CBO就是从优化后的逻辑计划到物理执行计划

猜你喜欢

转载自blog.csdn.net/m0_49834705/article/details/113319774