sparksql解析流程
阅读原文时间:2023年07月08日阅读:1

1、sparkSql处理核心:Catalyst工作流程(本质:把sql、dataframe相结合,以树tree的形式来存储、优化)

2、catalyst工作流程

1)Parser(解析器):SqlParser生成LogicPlan Tree

主要是先进行词法分析,再进行语法非分析

词法分析:将输入的sql语句串解析为一个一个的token

语法分析:在词法分析的基础上,将单词序列组合成各类语法短语,组成各个LogicPlan

2)Analyser:遍历整个语法树,对树上的每个节点进行数据类型绑定以及函数绑定。

根据元数据表解析为包含必要列的表,并且相应字段解析为相应的数据类型,相应的计算逻辑解析为对应的函数。

3)Optimizer:是Catalyst的核心

基于规则优化实际上对语法树再做一次遍历,模式匹配能够满足特定细节的节点,再进行相应的等价变换

经典规则:谓词下推、常量累加、和列值裁剪

4)Physical Planning:物理计划层

用物理操作算子产生一个或者多个物理计划。然后用cost模型选择一个物理计划。目前基于 cost-based的优化仅仅用于选择join算法。

对已知的很小的relations,sparksql会选择使用Spark 的提供的点对点的广播功能实现 Broadcast  join。

3、内存管理 Tungsten 内存管理器-- off-heap

本质:突破JVM内存管理限制,分配堆外内存。

JVM:GC带来时间开销,可能出现“假死” 情况