大数据体系和SQL的处理流程 | 青训营笔记
这是我参与「第四届青训营 」笔记创作活动的的第1天
一、大数据体系概况
如今,大数据的体系结构主要可以分为业务应用、数据开发、权限管控、分析引擎、资源调度、存储系统以及基础设施方面内容,并且具有海量化,多样化,快速化以及价值化的特征。在如今这个信息爆炸的信息社会具有极高的现实意义,对于决策以及规划都有着显著的指导性。
二、SQL的处理流程
1.Parser
所谓 parser,一般是指把某种格式的文本(字符串)转换成某种数据结构的过程。最常见的 parser,是把程序文本转换成编译器内部的一种叫做“抽象语法树”(AST)的数据结构,另外,也有简单一些的 parser,用于处理 CSV,JSON,XML 之类的格式。一般而言,Parser会由两个部分组成,一个是词法解析器,另一个则是语法解释器,分别对应于词法分析与语法分析。具体的工作流程为:对于输入的字符串文本,先由词法解释器将其转化为词组流(token),再由语法解释器解释生成AST。图示如下:
其具体的实现方法可以分为:递归下降,Flex和Bison,JavaCC以及Antlr。
2.Analyzer
Analyzer主要职责就是将通过Sql Parser未能Resolved的Logical Plan给Resolved掉。即实现AST到Logical Plan的转化。其left deep tree实现如下图所示:
3.Optimizer
Optimizer的主要职责是将Analyzer得到的Logical Plan根据不同的优化策略Batch,来对语法树进行优化,优化逻辑计划节点(Logical Plan)以及表达式(Expression),也是转换成物理执行计划的前置。它的工作原理和analyzer一致,也是通过其下的batch里面的Rule来进行处理的。 以下为Optimizer的几个典型策略
1)去除子查询
2)把操作符放置到union的两边
3)合并2个相邻的filter
4)把filter操作符放置到Project里面,即先做过滤,再选择
5)下推filter至join的左边和右边
6)剪裁列
7)合并两个相邻的limit
8)替换null表达式
9)优化in操作符
10)合并常量
11)简化like表达式
12)简化filter表达式
4.Executor
Executor的主要职责是将经过Optimizer优化得到的Logical Plan转化为Physical Plan。转换的目标为按照最小化网络数据传输将Logical Plan转化为Physical Plan。
课后总结
第一节课的老师讲述的这部分内容主要以介绍的方式呈现,同学们如果想要对此有更加深入的学习与了解,需要仔细分析其源码的实现,思考其性能以及实现的功能。
作为刚刚接触大数据内容的小白,虽然目前觉得一些名词十分晦涩难懂,但是希望通过自己这一段时间的学习,可以和同学们共同学习,探索大数据的奥秘。
引用参考
Spark-Sql源码解析之三 Analyzer:Unresolved logical plan –> analyzed logical plan
Spark-Sql源码解析之四 Optimizer: analyzed logical plan –> optimized logical plan