这是我参与「第四届青训营 」笔记创作活动的的第5天
0x00 大数据处理引擎Spark介绍
0.1 大数据技术栈
0.2 大数据处理链路
0.3 什么是Spark
0.4 Spark生态 & 特点
0.5 Spark运行架构 & 部署方式
0.5.1 运行架构
0.5.2 部署方式
0x01 SparkCore原理解析
1.1 SparkCore
1.2 RDD
1.2.1 什么是RDD?
容错的,可以并行执行的分布式数据集,是Spark中最基本的数据处理模型单元
1.2.2 如何创建RDD?
-
内置RDD
-
自定义RDD
1.2.3 RDD算子
-
Transform算子:生成一个新的RDD
-
Action算子:触发Job提交
1.2.4 RDD依赖
-
窄依赖:父RDD的每个partition至多对应一个子RDD分区
-
宽依赖:RDD的每个partition都可能对应多个子RDD分区
1.2.5 RDD执行流程
1.3 调度器
1.4 内存管理
1.5 Shuffle
1.5.1 SortShuffleManager
1.5.2 External Shuffle Service
0x02 SparkSQL原理解析
2.1 Catalyst
2.1.1 Catalyst优化器 - RBO
2.1.2 Catalyst优化器 - CBO
-
通过SQL收集信息,采集表的statistics
-
打开CBO参数spark.sql.cbo.enabled -> true
-
TableStat从ANALYZE TABLE获取,后续的算子的Stat通过对应的Estimation进行估算
2.1.3 自适应查询 - AQE
(Adaptive Query Execution)
2.1.3.1 Coalescing Shuffle Partitions
2.1.3.2 Switching Join Strategies
2.1.3.3 Optimizing Skew Joins
2.1.4 Runtime Filter
0x03 Spark业界挑战
3.1 Shuffle稳定性问题
3.2 SQL执行性能问题
压榨CPU资源:
CPU流水线/分支预测/乱序执行/SIMD/CPU缓存友好/..