当前位置: 首页 > news >正文

Spark SQL 执行计划解析源码分析

本文用于记录Spark SQL执行计划解析的源码分析。文中仅对关键要点进行提及,无法面面具到,仅描述大体的框架。

Spark的Client有很多种,spark-sql,pyspark,spark- submit,R等各种提交方式,这里以spark.sql()方法作为源码分析入口:
SparkSession的sql方法
在介绍具体的解析流程之前,我们画了一个图,图中展示了SQL被解析的各个阶段:
Spark SQL解析流程

  1. SQL文本会经过antlr框架执行词法解析,语法解析,随后生成一个AST树,进入后续各个阶段的执行计划解析和优化
  2. 首先是进入parsing阶段,由Parser解析LogicalPlan,生成unresolved LogicalPlan。Parser是ParserInterface的实现,具体的继承关系如下图:
    Parser 类图
  3. 接下来进入analysis阶段,有Analyzer执行一系列的rule生成analyzed LogicalPlan。Analyzer继承自RuleExecutor,是一系列analyze的rule集合
    RuleExecutor类图
  4. 接着进入optimization阶段,负责优化的是Optimizer,它也是继承自RuleExecutor,随后生成optimized LogicalPlan。
  5. optimized LogicalPlan会被被传递给SparkPlanner进入planning阶段,同样也是一系列的Rule,不同的是这一阶段已经到了物理计划的解析,输出结果不再是LogicalPlan,而是SparkPlan。
    SparkPlaner
  6. 第一个planning阶段结束后,还会再次进去planning阶段,此时负责优化的是preparations(一些列针对SparkPlan优化的Rule),主要就是插入AQE相关的优化。此时生成的就是executedPlan。

至此,Spark SQL的执行计划(逻辑计划,物理计划)解析就告一段落,剩下的就是拿到executedPlan开始切分stage,task,申请资源进行调度,执行具体物理计划的逻辑了。

http://www.lryc.cn/news/503032.html

相关文章:

  • rabbitMq举例
  • 奇怪的知识又增加了:ESP32下的Lisp编程=>ULisp--Lisp for microcontrollers
  • 渗透测试之信息收集
  • 基本分页存储管理
  • SQLServer到MySQL的数据高效迁移方案分享
  • 软考:工作后再考的性价比分析
  • shell编程(完结)
  • UNIX数据恢复—UNIX系统常见故障问题和数据恢复方案
  • adb连接逍遥安卓模拟器失败的问题解决方案
  • 【昇腾】NPU ID:物理ID、逻辑ID、芯片映射关系
  • Three.js曲线篇 8.管道漫游
  • scala基础_数据类型概览
  • 【LeetCode刷题之路】622.设计循环队列
  • 暂停一下,给Next.js项目配置一下ESLint(Next+tailwind项目)
  • Windows系统磁盘与分区之详解(Detailed Explanation of Windows System Disks and Partitions)
  • 顺序表的使用,对数据的增删改查
  • XDMA与FPGA:高效数据传输的艺术
  • #思科模拟器通过服务配置保障无线网络安全Radius
  • 浅谈Python库之pillow
  • Android通过okhttp下载文件(本文案例 下载mp4到本地,并更新到相册)
  • 计算机网络从诞生之初到至今的发展历程
  • Kudu 源码编译-aarch架构 1.17.1版本
  • SEC_ASA 第二天作业
  • 操作系统(5)进程
  • 6_Sass 选择器函数 --[CSS预处理]
  • 考研数学【线性代数基础box(数二)】
  • ModbusTcp获取数据
  • java 知识点:注解及使用
  • AI预测体彩排3采取888=3策略+和值012路+胆码+通杀1码测试12月13日升级新模型预测第156弹
  • faiss数据库检索不稳定