第五次课堂记录|青训营笔记

75 阅读2分钟

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

Spark原理及实践

一、大数据处理引擎Spark介绍

1.1 大数据处理技术栈

image.png

1.2 常见大数据处理链路

image.png

1.3 什么是Spark

image.png

1.4 Spark生态&特点

  • 统一引擎,支持多种分布式场景
  • 多语言支持
  • 可读写丰富数据源
  • 丰富灵活的API/算子
  • 支持K8S、YARN、Mesos资源调度

image.png

1.4.1 Spark特点-丰富数据源

内置DataSource

  • Text
  • Parquet/ORC
  • JSON/CSV
  • JDBC

自定义DataSource

  • 实现DataSourceV1 V2 API
  • HBase/Mongo/ElasticSearch
  • A community index of third-party packages for Apache Spark

1.4.2 丰富的API/算子

image.png

1.5 SPark运行架构&部署方式

Spark Local Mode

本地测试/单进程多线程模式 spark-sql --master local[*]

Spark Standalone Mode

需要启动Spark的Standalone集群的Master/Worker

image.png

1.6 Spark下载编译

image.png

1.7 Spark性能benchmark

TPC-DS/TPC-H benchmark image.png

二、SparkCore原理解析

2.1 SparkCore

image.png

2.2 RDD

Resilient Distributed Dataset

Represents an immutable, partitioned collection of elements that can be operated on in parallel

image.png

2.2.1 如何创建RDD?

image.png

2.2.2 RDD 算子

  • Transform算子:生成一个新的RDD

image.png

  • Action算子:触发Job提交

image.png

2.2.3 RDD依赖

RDD依赖:描述父子RDD之间的依赖关系(lineage)

  • 窄依赖:父RDD的每个partition至多对应一个子RDD分区 NarrowDependency OneToOneDependency RangeDependency PruneDependency
  • 宽依赖:父RDD的每个partition都可能对应多个子RDD分区 ShuffleDependency

image.png

2.2.4 RDD执行流程

image.png

2.3 调度器

image.png

2.4 内存管理

image.png

  • Executor内存主要有两类:Storage Execution
  • UnifiedMemoryManager统一管理Storage/Execution内存
  • Storage和Execution内存使用是动态调整,可以相互借用
  • 当Storage空闲,Execution可以借用Storage的内存使用
  • 可以减少spill等操作,Execution使用的内存不能被Storage驱逐
  • 当Execution空闲,Storage可以借用Execution的内存使用
  • 当Execution需要内存时,可以驱逐被Storage借用的内存,知道spark.memory.storageFraction边界

2.4.1 多任务间内存分配

UnifiedMemoryManager统一管理多个并发Task的内存分配

每个Task获取的内存区间魏1/(2*N)~1/N N为当前Executor中正在并发运行的task数量

image.png

2.5 Shuffle

image.png

2.5.1 SortShuffleManager

image.png

2.5.2 External Shuffle Service

image.png

三、SparkSQL原理解析

image.png

3.1 Catalyst优化器

image.png RBO

image.png

CBO

image.png

3.2 Adaptive Query Execution(AQE)

image.png

3.3 Runtime Filter

image.png

3.4 Bloom Runtime Filter

3.5 Codegen - Expression

image.png

WholeStageCodegen

image.png