spark SQL 内核分析(一)

2022-11-10 21:33:24 浏览数 (1)

本文章简要概述了spark sql 的执行流程以及基本原理。

spark sql 本质是将sql 语句解析为对应的RDD模型来进行执行spark 相关的计算操作。

在spark 中,RDD中的窄依赖是类似于pipeline 来进行执行操作的,宽依赖是需要在不同的节点进行shuffle操作。

总的来说,RDD 能很方便的支持MapReduce应用、关系型数据处理、流式数据处理、以及迭代型的应用。

在spark 2.0中Dataset 成为了spark中主要的API,结合了RDD以及DataFrame的特点,属于spark的高级API。

spark sql 简要执行流程过程概览:

LogicalPlan 阶段会将用户所输入的SQL Query transition to 逻辑算子树,sql 语句中所包含的逻辑映射到逻辑算子树的不同节点,且逻辑算子树不会进行执行,只会作为中间阶段。

逻辑算子树三大子阶段:

(1)Unresolved LogicalPlan(未解析逻辑算子树),仅仅只是数据结构,其中不包含任何数据信息。

(2)Analyzed LogicalPlan(解析后的逻辑算子树),节点中绑定各种信息。

(3)Optimized LogcalPlan (解析优化后的逻辑算子树),应用各种优化规则对一些低效的逻辑计划进行转换。

物理计划阶段,会将上一步逻辑计算阶段生成的逻辑算子树来进行实际转换,生成物理算子树,其中物理计划阶段会直接生成RDD 或者对RDD来进行transformation 操作,来对应sql ,到最后才进行action操作(如实例中的show操作),来对RDD来进行实际提交执行。

其中SQL 语句在解析一直到提交之前,上述的整个转换过程都是在spark集群中driver端来进行的,不涉及分布式环境,sparkSession 类的sql 方法调用sessionState中的各种对象,包括上述的不同阶段生成的对应的SparkSqlParser类、Analyzer类、Optimizer类和sparkPlanner类等,最后封装成一个QueryExcution对象。因此,在进行sparkSql开发的过程中,可以很方便的将每一步生成的计划单独的剥离出来进行分析。

重点:

spark SQL 内部实现上述流程中平台无关部分的基础框架称之为Catalyst。

Catalyst中主要包括了InternalRow体系、TreeNode体系、和Expression体系。

0 人点赞