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

99 阅读1分钟

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


0x00 大数据处理引擎Spark介绍

0.1 大数据技术栈

4_大数据技术栈.png

0.2 大数据处理链路

4_大数据处理链路.png

0.3 什么是Spark

4_Spark.png

0.4 Spark生态 & 特点

4_Spark生态.png

0.5 Spark运行架构 & 部署方式

0.5.1 运行架构

4_运行架构.png

0.5.2 部署方式

4_Spark部署方式.png


0x01 SparkCore原理解析

1.1 SparkCore

4_SparkCore0.png 4_SparkCore.png

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分区

4_RDD依赖.png

1.2.5 RDD执行流程

4_RDD执行流程.jpeg

1.3 调度器

4_RDD执行.png

1.4 内存管理

4_内存管理.png

1.5 Shuffle

4_shuffle.png

1.5.1 SortShuffleManager

4_SortShuffleManager.png

1.5.2 External Shuffle Service

4_External.png


0x02 SparkSQL原理解析

4_SparkSQL.png

2.1 Catalyst

2.1.1 Catalyst优化器 - RBO

4_RBO.png

2.1.2 Catalyst优化器 - CBO

  1. 通过SQL收集信息,采集表的statistics

  2. 打开CBO参数spark.sql.cbo.enabled -> true

  3. TableStat从ANALYZE TABLE获取,后续的算子的Stat通过对应的Estimation进行估算

2.1.3 自适应查询 - AQE

(Adaptive Query Execution)

4_AQE0.png

2.1.3.1 Coalescing Shuffle Partitions

4_AQE2.png 4_AQE1.png

2.1.3.2 Switching Join Strategies

4_AQE3.png

2.1.3.3 Optimizing Skew Joins

4_AQE4.png 4_AQE5.png

2.1.4 Runtime Filter

4_Runtime.png


0x03 Spark业界挑战

3.1 Shuffle稳定性问题

4_稳定性.png

3.2 SQL执行性能问题

压榨CPU资源:

CPU流水线/分支预测/乱序执行/SIMD/CPU缓存友好/..

4_SQL执行.png