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

130 阅读2分钟

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

1. Spark介绍

  1. 大数据处理技术栈

    数据->存储->计算->应用

  2. 常见大数据处理链路

    数据源->数据采集->原始数据->数据处理->数据应用

  3. Spark:多语言引擎

    特征:多元选择统一方式;快速数据查询分析;大规模数据科学;机器学习

  4. 生态 & 特点

    • 统一引擎
    • 多语言支持:SQL, JAVA, R, PYTHON
    • 支持各样的数据源:内置DataSource,自定义DataSource
    • 丰富的API/算子:SparkCore, SparkSQL
  5. 运行架构 & 部署方式

    Spark Local Mode:本地测试/单进程

    Spark StandAlone Mode:基础

    YARN/K8S:主流(外部资源调度器)

  6. 下载编译

    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

  1. Adaptive Query Execution(AQE)

(1)Coalescing Shuffle Partitions:Partition合并

(2)Switching Join Strategies

(3)Optimizing Skew Joins数据倾斜:分区直接数据分布不均匀;将大的partition拆分

  1. Runtime Filter
  • 减少了大表的扫描
  1. Bloom Runtime Filter

  2. Codegen - Expression

  • 将表达式中的大量虚函数调用压平到一个函数内部

  • WholeStageCodegen

4. 业界挑战与实践

  1. Shuffle稳定性问题

  2. SQL执行性能问题

  3. 参数推荐/作业诊断