Spark原理与实践|青训营笔记
这是我参与「第四届青训营 」笔记创作活动的的第3天
1.大数据处理引擎Spark介绍
- Apache Spark™是一个多语言引擎,用于在单节点机器或集群上执行数据工程、数据科学和机器学习
- 支持:批处理/流数据、SQL分析、大规模数据科学、机器学习
- 运行架构:Driver Program、Cluster Manager、 Worker Node
- 部署方式:Spark Local Mode 、Spark Standalone Mode、 on yarn/K8S
- Spark Job -->HDFS-->Spark History server
- Spark性能benchmark
2.sparkCore原理解析
RDD(Pesilient Distributed Dataset):Represents a immutable,partitioned collection of elements that can be operated on in parallel.
2.1创建RDD
内置RDD、自定义RDD
2.2RDD算子
Transform算子:生成一个新的RDD Action算子:触发Job提交
2.3RDD依赖
描述父子RDD之间的依赖关系
窄依赖:父RDD的每个partition至多对应一个子RDD分区
- NarrowDependency
- PruneDependency
- RangeDependency
- OneToOneDependency
宽依赖:父RDD的每个partition至多对应多个子RDD分区
- ShuffleDependency
2.4RDD执行流程
2.5调度器
根据ShuffleDependency切分Stage并依照依赖顺序调度Stage,为每个Stage生成并提交TaskSet到TaskScheduler,根据调度算法(FIFO/FAIR)对多个TaskSet进行调度,对于调度到的TaskSet,会将Task调度(locality)到相关Executor上面
2.6内存管理
Executor内存主要有两类:Storage、Execution
- UnifiedMemoryManager统一管理Storage/Execution内存
- Storage和Execution内存使用是动态调整,可以互相借用
2.6.2 External Shuffle Service
shuffle write的文件被NodeManger中的Shuffle Service托管,供后续ReduceTask进行shuffle fetch ,如果Executor空闲,DRA可以进行回收
3.sparkSQL原理解析
- Catalyset优化器-RBO
- Catalyset优化器-CBO
- Adaptive Query Execution(AQE)
- AQE-Coalescing Shuffle Partitions
- AQE-Swiching Join Stratrgies
- AQE- Optimizing Skew Joins
- Runtime Filter
- Codegen- Expresion
- Bloom Runtime Filter
- Codegen- WholeStageCodegen
4.业界挑战与实践
shuffle 稳定性问题:在大规模作业下,开源ExternalShuffleService(ESS)的实现机制容易带来大量随机读导致的磁盘IOPS瓶颈、Fetch请求积压等问题,进而导致运算过程中经常会出现Stage重算甚至作业失败,继用引起资源使用的恶性循环,严重影响SLA.
shuffle解决方案:Uber、Linkedln、Alibaba、Tencent、Bytedance