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

88 阅读2分钟

这是我参与【第四届青训营】笔记创作活动的第4天

一、本堂课重点内容

1)大数据处理引擎Spark介绍

2)SparkCore原理解析

3)SparkSQL原理解析

二、详细知识点介绍

2.1 大数据处理引擎Spark介绍

2.1.1 Spark版本演进

image.png

2.1.2 Spark生态特点

1)统一引擎,支持多种分布式场景

2)多语言支持,eg:SQL、Java/Scala、Python、R

3)可读写丰富数据源,eg:内置DataSource、自定义DataSource

4)丰富灵活的API/算子,eg:SparkCore->RDD、SparkSQL->DataFrame

5)支持K8S/YARN/Mesos 资源调度

2.2 SparkCore原理解析

2.2.1 RDD的五要素

(1)Compute(2)Dependencies(3)Partitioner (4)PreferredLocations

2.2.2 RDD算子

1)Transform算子(生成一个新的RDD)

2)Action算子(触发Job提交)

2.2.3 RDD依赖

1)窄依赖:父RDD的每个partition至多对应一个子RDD分区

2)宽依赖:父RDD的每个partition都可能对应多个子RDD分区

2.3 SparkSQL原理解析

2.3.1 AQE-Optimizing Skew Joins

AQE根据MapStatus信息自动检测是否有倾斜,将大的partition拆分为多个Task进行Join

2.4 Runtime Filter

image.png

2.5 Codegen-Expression

表达式:select(a+1)*a from t

将表达式中的大量虚函数调用压平到一个函数内部,类似手写代码

2.6 Codegen-WholeStageCodegen

表达式:select(a+1)*a from t where a=1

特点:(1)将同一个Stage中的多个算子压平到一个函数内部进行执行

(2)一个SQL包含多个Stage的WholeStageCodegen

image.png

2.7 SQL执行性能

1)问题:压榨CPU资源

2)解决方向:photon(c++实现的向量化执行引擎)

2.8 Shuffle稳定性问题

在大规模作业下,开源ExternalShuffleService的实现机制容易带来大量随机读导致的磁盘IOPS瓶颈、Fetch请求积压等问题,进而导致运算过程中经常会出现Stage重算甚至作业失败,继而引起资源使用的恶性循环,严重影响SLA.

三、实践练习例子

Spark流式计算电商商品关注度

四、课后个人总结

在本章节学习中,对于Shuffle稳定性解决方案和RDD算子知识点较为不易掌握,而对于宽依赖算子和窄依赖算子的区分处容易混淆,需要做好一定的整理和记录,为日后学习做铺垫。

五、引用参考

参考文章: www.shiyanlou.com/courses/783