Spark源码阅读的正确打开方式

2022-05-31 00:00:00 版本 源码 计算 核心 容错

Spark发展至今,应该说已经非常成熟了。是大数据计算领域不得不学习的框架。尤其是Spark在稳定性和社区发展的成熟度方面,吊打其他的大数据处理框架。

Spark至今只经历过1.x、2.x和3.x三个大版本的变化,在核心实现上,我们在Github能看到的早的实现是0.5版本,这个版本只有1万多行代码,就把Spark的核心功能实现了。

当然我们不可能从这么古老的版本看,假如你接触过Spark,现在准备看源码,那么我建议从2.x版本中选取一个,好是2.3或者2.4。但是经过如此多的迭代,Spark的代码量已经暴增了几倍。所以你需要抓住重点,本文就是想跟大家说说,我们该怎么看,看哪些东西。

基础概念篇

首先假如你是次接触Spark,那么你需要对Spark的设计思想有所了解,知道Spark用了哪些抽象,Spark在提出RDD的时候是基于什么样的考虑。

在这里给大家推荐几篇论文如下:

篇:这个不多说,直接给出一个链接,这篇文章不长,很快能看完。

  • 弹性分布式数据集:一种为内存化集群计算设计的容错抽象
    https://fasionchan.com/blog/2017/10/19/yi-wen-tan-xing-fen-bu-shi-shu-ju-ji-yi-zhong-wei-nei-cun-hua-ji-qun-ji-suan-she-ji-de-rong-cuo-mo-xing/

第二篇:

  • 大型集群上的快速和通用数据处理架构

这篇论文长达170多页,当然我们没有必要看完,我在网上找到一个总结,我们在《弹性分布式数据集:一种为内存化集群计算设计的容错抽象》这篇论文基础上看起来也会轻松不少。链接如下:https://blog.csdn.net/weixin_44024821/article/details/89948115

环境准备

Spark的源码环境搭建网上有很多资源,主要是环境依赖比如JDK、Scala、Maven等,整个过程大概耗时要1-4个小时,主要是编译源码费时。大家可以在网上任意找一篇文章搭建起来环境就可以。直到你在编译时出现下图就大功告成了。(我个人强烈不建议使用sbt的方式编译,推荐Maven)

Spark核心设计篇

上图是一个简单的Spark任务的执行图。

在核心设计篇,我们重要的模块列表如下:

Spark的初始化

SparkContextSparkEnvSparkConfRpcEnvSparkStatusTrackerSecurityManagerSparkUIMetricsSystemTaskScheduler

Spark的存储体系

SerializerManagerBroadcastManagerShuffleManagerMemoryManagerNettyBlockTransferServiceBlockManagerMasterBlockManagerCacheManager

Spark的内存管理

MemoryManagerMemoryPoolExecutionMemoryPoolStorageMemoryPoolMemoryStoreUnifiedMemoryManager

Spark的运算体系

LiveListenerBusMapOutputTrackerDAGSchedulerTaskSchedulerExecutorAllocationManagerOutputCommitCoordinatorContextClearner

Spark的部署模式

LocalSparkClusterStandaloneMater/Executor/Worker的容错

Spark Streaming

StreamingContextReceiverDstream窗口操作

Spark SQL

CatalogTreeNode词法解析器ParserRuleExecutorAnalyzer与OptimizerHive SQL相关

其他

假如你对图计算Spark GraphX和机器学习Spark MLlib感兴趣,可以单独看看。

整个跟实时计算相关的包和类大部分都已经包含在上述目录中了。假如你在使用的过程中出现了问题,就需要针对其中的具体部门去看。

源码阅读是我们每一个开发者都需要经历的阶段,阅读源码的好处就不说了。你我都懂。

相关文章