大数跨境
0
0

你知道SparkSQL的执行流程吗?

你知道SparkSQL的执行流程吗? 三石大数据
2025-11-22
1

推荐阅读文章列表

2025最新大数据开发面试笔记V7.0——试读

简历指导套餐4.0——对标大厂的PB级数仓项目

没有实习经历,还有机会进大厂吗

前言

很多同学听到这个面试题,肯定就懵了,这不就是把一段SQL放在Spark环境执行,然后输出一个结果,面试官到底想要知道啥执行流程

今天就带着大家一起看看SparkSQL的执行流程到底是怎么回事

执行流程

我们应该了解Spark SQL和Spark Core之间的关系,Spark SQL构建在Spark Core之上,专门用来处理结构化数据,即Spark SQL是Spark Core封装而来的,因此底层会将SQL代码转换为RDD代码来执行

接下来我们看一个简单的案例

import org.apache.spark.sql.SparkSession

object Example {

def main(args: Array[String]): Unit = {
    // 1、初始化SparkSession
    val spark = SparkSession.builder().appName("Example").getOrCreate()
    // 2、读取数据
    // id  name  age
    // 1   zhangsan  23
    // 2   lisi  26
    // 3   wangwu  27
    spark.read.csv("student.csv").createOrReplaceTempView("student")
    // 3、执行SQL查询语句
    spark.sql("select id, name, age from student where age > 25").show(false)
  }
}

一般来讲,SQL转换为RDD的执行主要包括逻辑计划和物理计划两大阶段

  • 逻辑计划阶段:
    1. 由SparkSqlParser中的AstBuilder执行节点访问,将语法树的各种Context节点转换成对应的LogicalPlan节点,从而成为一颗未解析的逻辑算子树(Unresolved LogicalPlan)
    2. 由Analyzer将一系列的规则作用在Unresolved LogicalPlan上,对树上的节点绑定各种数据信息,生成解析后的逻辑算子树(Analyzed LogicalPlan)
    3. 由SparkSQL中的优化器将一系列优化规则作用到上一步的逻辑算子树上,在确保结果正确的前提下改写其中的低效结构,生成优化后的逻辑算子树(Optimized LogicalPlan)
  • 物理计划阶段:
    1. 由SparkPlanner将各种物理计划策略(Strategy)作用于对应的LogicPlan节点上,生成SparkPlan列表
    2. 选取最佳的SparkPlan,调用next方法获取第一个(Spark2.1版本)
    3. 提交前进行准备工作,进行一些分区排序方面的处理,确保SparkPlan各节点能够正确执行,这一步通过prepareForExecution()方法调用若干规则(Rule)进行转换

再直接点说,这些SQL代码会转换成的RDD伪代码如下:

写在最后

V7.0笔记获取方式

公众号回复:大数据面试笔记

【声明】内容源于网络
0
0
三石大数据
专注于大数据开发相关技术以及面试经验分享
内容 205
粉丝 0
三石大数据 专注于大数据开发相关技术以及面试经验分享
总阅读15
粉丝0
内容205