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

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

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

https://mmbiz.qpic.cn/mmbiz_jpg/UdK9ByfMT2MSKPJAPEuwFF4c51BIibTSLV41740Vutq954fX6Fteiaan8ZlFGYcnT5N9Vs7qlJ6EgnBX4IgYprtw/640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1Spark源码阅读的正确打开方式

当然我们不可能从这么古老的版本看,假如你接触过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)

https://mmbiz.qpic.cn/mmbiz_jpg/UdK9ByfMT2MSKPJAPEuwFF4c51BIibTSLvX4kgyJe4iboNydKuCN2kWpIIH6ibebzeiau8pfmibQUC3f3ebslwf3W5w/640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1Spark源码阅读的正确打开方式

Spark核心设计篇

https://mmbiz.qpic.cn/mmbiz_png/UdK9ByfMT2MSKPJAPEuwFF4c51BIibTSLshuQSPsOJW1rC7icLgKSPLq7ficCAgzxc8L9qhHKLS9Z6nqTfia9WtThQ/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1Spark源码阅读的正确打开方式

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

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

Spark的初始化

SparkContext SparkEnv SparkConf RpcEnv SparkStatusTracker SecurityManager SparkUI MetricsSystem TaskScheduler

Spark的存储体系

SerializerManager BroadcastManager ShuffleManager MemoryManager NettyBlockTransferService BlockManagerMaster BlockManager CacheManager

Spark的内存管理

MemoryManager MemoryPool ExecutionMemoryPool StorageMemoryPool MemoryStore UnifiedMemoryManager

Spark的运算体系

LiveListenerBus MapOutputTracker DAGScheduler TaskScheduler ExecutorAllocationManager OutputCommitCoordinator ContextClearner

Spark的部署模式

LocalSparkCluster Standalone Mater/Executor/Worker的容错

Spark Streaming

StreamingContext Receiver Dstream 窗口操作

Spark SQL

Catalog TreeNode 词法解析器Parser RuleExecutor Analyzer与Optimizer HiveSQL相关

其他

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

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

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

关注我的公众号,后台回复【JAVAPDF】获取200页面试题!
5万人关注的大数据成神之路,不来了解一下吗?
5万人关注的大数据成神之路,真的不来了解一下吗?
5万人关注的大数据成神之路,确定真的不来了解一下吗?

欢迎您关注《大数据成神之路》
上一篇:HTTP2协议迁移的必要性


下一篇:Vue.js静态站点部署-Vercel +GitHub