这是我参与「第四届青训营 」笔记创作活动的的第四天
一、本堂课重点内容:
- 大数据引擎Spark介绍
- SparkCore原理
- SparkSQL原理
二、详细知识点介绍:
大数据处理技术栈介绍
Spark运行架构介绍
SparkContext
每一个Spark应用都是一个SparkContext实例,可以理解为一个SparkContext就是一个spark application的生命周期。
SparkContext是spark功能的主要入口。其代表与spark集群的连接,能够用来在集群上创建RDD、累加器、广播变量。每个JVM里只能存在一个处于激活状态的SparkContext,在创建新的SparkContext之前必须调用stop()来关闭之前的SparkContext。
SparkCore
RDD:弹性分布式数据集,是一个容错的、并行的数据结构
RDD算子:对任何函数进行某一项操作都可以认为是一个算子,RDD算子是RDD的成员函数
- Transform(转换)算子: 生成新的RDD map/filter/flatMap/groupByKey/ReduceByKey
- Action(动作)算子: 触发Job提交 collect/count/take/saveASTextfile
DAG(Directed Acyclic Graph): 有向无环图,Spark中的RDD通过一系列的转换算子操作和行动算子操作形成了一个DAG
静态内存管理模型
Executor内存主要分为两类:execution(执行内存)和storage(存储内存)
重点在于动态占用机制
execution(执行内存):shuffle过程中间数据 storage(存储内存):缓存rdd、广播数据
SparkSQL
calalyst优化器
- RBO:基于规则优化,经验式启发式优化规则
- CBO:基于代价优化,根据优化规则对关系表达式进行转换,生成多个执行计划,选取cost最低,CBO依赖数据库对象的统计信息,统计信息的准确与否会影响CBO做出最优的选择。
AQE(自适应查询)
spark3.0新特性,可以根据已经完成的计划结点真实且精确的执行统计结果来不停的反馈并重新优化剩下的执行计划。 AQE框架三种优化场景:
- 动态合并shuffle分区(Dynamically coalescing shuffle partitions)
- 动态调整Join策略(Dynamically switching join strategies)
- 动态优化数据倾斜Join(Dynamically optimizing skew joins)