这是我参与「第四届青训营 」笔记创作活动的的第7天
1. Spark介绍
-
大数据处理技术栈
数据->存储->计算->应用
-
常见大数据处理链路
数据源->数据采集->原始数据->数据处理->数据应用
-
Spark:多语言引擎
特征:多元选择统一方式;快速数据查询分析;大规模数据科学;机器学习
-
生态 & 特点
- 统一引擎
- 多语言支持:SQL, JAVA, R, PYTHON
- 支持各样的数据源:内置DataSource,自定义DataSource
- 丰富的API/算子:SparkCore, SparkSQL
-
运行架构 & 部署方式
Spark Local Mode:本地测试/单进程
Spark StandAlone Mode:基础
YARN/K8S:主流(外部资源调度器)
-
下载编译
Spark UI:查看运行过程
2. SparkCore 原理解析
1. SparkCore
2. RDD:可容错,并行
- 分区列表:创建时可指定
- 计算函数
- 依赖:依赖于其他的RDD
- 实现两种类型的分区器
- 优先的位置列表
(1)如何创建?—— 内置RDD/自定义RDD
(2)算子:Transform算子;Action算子
(3)依赖
- 窄依赖:父RDD的每个partition至多对应一个子RDD分区(NarrowDependency,PruneDependency,RangeDependency,OneToOneDependency)
- 宽依赖:父RDD的每一个partition都可能对应多个RDD分区(ShuffleDependency)
(4)执行流程
Job:RDD action算子触发
Stage:依据宽依赖划分
Task:Stage内执行单个partition任务
(5)调度器
(6)内存管理 Executor Container
Executor Memory<——>Storage Memory
多任务间内存分配:UnifiedMemoryManager统一管理多个并发Task的内存分配
(7)Shuffle
-
SortShuffleManager
-
External Shuffle Service:管理Shuffle数据
3. SparkSQL 原理解析
1. Catalyst优化器
(1)RBO
-
Batch执行策略:Once只执行一次 ;FixedPoint:重复执行,直到策略不能再进行优化
-
谓词下推;基于经验
(2)CBO
- Adaptive Query Execution(AQE)
(1)Coalescing Shuffle Partitions:Partition合并
(2)Switching Join Strategies
(3)Optimizing Skew Joins数据倾斜:分区直接数据分布不均匀;将大的partition拆分
- Runtime Filter
- 减少了大表的扫描
-
Bloom Runtime Filter
-
Codegen - Expression
-
将表达式中的大量虚函数调用压平到一个函数内部
-
WholeStageCodegen
4. 业界挑战与实践
-
Shuffle稳定性问题
-
SQL执行性能问题
-
参数推荐/作业诊断