这是我参与【第四届青训营】笔记创作活动的第4天
一、本堂课重点内容
1)大数据处理引擎Spark介绍
2)SparkCore原理解析
3)SparkSQL原理解析
二、详细知识点介绍
2.1 大数据处理引擎Spark介绍
2.1.1 Spark版本演进
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
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
2.7 SQL执行性能
1)问题:压榨CPU资源
2)解决方向:photon(c++实现的向量化执行引擎)
2.8 Shuffle稳定性问题
在大规模作业下,开源ExternalShuffleService的实现机制容易带来大量随机读导致的磁盘IOPS瓶颈、Fetch请求积压等问题,进而导致运算过程中经常会出现Stage重算甚至作业失败,继而引起资源使用的恶性循环,严重影响SLA.
三、实践练习例子
Spark流式计算电商商品关注度
四、课后个人总结
在本章节学习中,对于Shuffle稳定性解决方案和RDD算子知识点较为不易掌握,而对于宽依赖算子和窄依赖算子的区分处容易混淆,需要做好一定的整理和记录,为日后学习做铺垫。