Spark原理与实践|青训营笔记

160 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的第8天

笔记目录

  • 大数据处理引擎Spark介绍
  • SparkCode原理解析
  • SparkSQL原理解析

Spark介绍

Spark 于 2009 年诞生于加州大学伯克利分校 AMPLab,2013 年被捐赠给 Apache 软件基金会,2014 年 2 月成为 Apache 的顶级项目。相对于 MapReduce 的批处理计算,Spark 可以带来上百倍的性能提升,因此它成为继 MapReduce 之后,最为广泛使用的分布式计算框架。

Spark特点

  1. 统一引擎,支持多种分布式场景
  2. 多语言支持
  3. 可读写丰富数据源
  4. 丰富灵活的API
  5. 支持K8S/YARN/Mesos资源调度

Spark运行架构

1659361980(1).png

运行过程

  1. 用户程序创建 SparkContext 后,它会连接到集群资源管理器,集群资源管理器会为用户程序分配计算资源,并启动 Executor;
  2. Driver 将计算程序划分为不同的执行阶段和多个 Task,之后将 Task 发送给 Executor;
  3. Executor 负责执行 Task,并将执行状态汇报给 Driver,同时也会将当前节点资源的使用情况汇报给集群资源管理器。

SparkCode原理介绍

什么是RDD

RDD(Resilient Distributed Dataset)叫做弹性分布式数据集, 是Spark中的抽象数据结构类型,Spark中最基础的数据抽象,实现了以操作本地集合的方式来操作分布式数据集的抽象实现,他代表一个不可变,可分区,里面的元素可并行计算的集合。

RDD执行过程

微信图片_20220801222554.png

job:RDD action算子触发 。 Stage:依据宽依赖划分。 Task:Stage内执行单个partition任务

过程:

  • 准备资源
  • 创建Driver和Execotor节点
  • 将应用程序的数据处理逻辑分解成一个一个的计算任务task
  • 将task发到已经分配资源的计算节点Executor上按照指定的计算模型进行数据计算,最后得到结果

SparkSQL原理解析

什么是SparkSQL

SparkSQL是Spark用于结构化数据处理的模块

SparkSQL执行链路

微信图片_20220801224527.png

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优化器:

  1. CBO;基于代价优化,生成多个执行计划。
  2. RBO:基于规则转化,对语法树进行一次遍历,匹配模式能够满足特定规则的节点,再进行相应转化.