这是我参与「第四届青训营 」笔记创作活动的第8天
笔记目录
- 大数据处理引擎Spark介绍
- SparkCode原理解析
- SparkSQL原理解析
Spark介绍
Spark 于 2009 年诞生于加州大学伯克利分校 AMPLab,2013 年被捐赠给 Apache 软件基金会,2014 年 2 月成为 Apache 的顶级项目。相对于 MapReduce 的批处理计算,Spark 可以带来上百倍的性能提升,因此它成为继 MapReduce 之后,最为广泛使用的分布式计算框架。
Spark特点
- 统一引擎,支持多种分布式场景
- 多语言支持
- 可读写丰富数据源
- 丰富灵活的API
- 支持K8S/YARN/Mesos资源调度
Spark运行架构
运行过程
- 用户程序创建 SparkContext 后,它会连接到集群资源管理器,集群资源管理器会为用户程序分配计算资源,并启动 Executor;
- Driver 将计算程序划分为不同的执行阶段和多个 Task,之后将 Task 发送给 Executor;
- Executor 负责执行 Task,并将执行状态汇报给 Driver,同时也会将当前节点资源的使用情况汇报给集群资源管理器。
SparkCode原理介绍
什么是RDD
RDD(Resilient Distributed Dataset)叫做弹性分布式数据集, 是Spark中的抽象数据结构类型,Spark中最基础的数据抽象,实现了以操作本地集合的方式来操作分布式数据集的抽象实现,他代表一个不可变,可分区,里面的元素可并行计算的集合。
RDD执行过程
job:RDD action算子触发 。 Stage:依据宽依赖划分。 Task:Stage内执行单个partition任务
过程:
- 准备资源
- 创建Driver和Execotor节点
- 将应用程序的数据处理逻辑分解成一个一个的计算任务task
- 将task发到已经分配资源的计算节点Executor上按照指定的计算模型进行数据计算,最后得到结果
SparkSQL原理解析
什么是SparkSQL
SparkSQL是Spark用于结构化数据处理的模块
SparkSQL执行链路
SparkSQL执行过程
- parser;将antlr的tree转成spark catalyst的LogicPlan也就是unresolve logical plan
- analyzer;通过分析器,结合catalog,把logical plan和实际的数据绑定起来,将unresolve logical plan生成 logical plan
- 缓存替换,通过CacheManager,替换有相同结果的logical plan
- logical plan优化,基于规则的优化;优化规则参考Optimizer,优化执行器RuleExecutor
- 生成spark plan,也就是物理计划;
- spark plan准备阶段
- 构造RDD执行,涉及spark的wholeStageCodegenExec机制,基于janino框架生成java代码并编译
抽象语法树AST
是源代码语法结构的一种抽象表现,以树状的形式表现编程语言的语法结构。
Catalyst优化器:
- CBO;基于代价优化,生成多个执行计划。
- RBO:基于规则转化,对语法树进行一次遍历,匹配模式能够满足特定规则的节点,再进行相应转化.