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

114 阅读2分钟

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