首页 > 数据库 > > Spark源码阅读的正确打开方式
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的时候是基于什么样的考虑。
在这里给大家推荐几篇论文如下:
第一篇:这个不多说,直接给出一个链接,这篇文章不长,很快能看完。
第二篇:
这篇论文长达170多页,当然我们没有必要看完,我在网上找到一个总结,我们在《弹性分布式数据集:一种为内存化集群计算设计的容错抽象》这篇论文基础上看起来也会轻松不少。链接如下:https://blog.csdn.net/weixin_44024821/article/details/89948115
环境准备
Spark的源码环境搭建网上有很多资源,主要是环境依赖比如JDK、Scala、Maven等,整个过程大概耗时要1-4个小时,主要是编译源码费时。大家可以在网上任意找一篇文章搭建起来环境就可以。直到你在编译时出现下图就大功告成了。(我个人强烈不建议使用sbt的方式编译,推荐Maven)
Spark核心设计篇
上图是一个最简单的Spark任务的执行图。
在核心设计篇,我们最重要的模块列表如下:
SparkContextSparkEnvSparkConfRpcEnvSparkStatusTrackerSecurityManagerSparkUIMetricsSystemTaskScheduler
SerializerManagerBroadcastManagerShuffleManagerMemoryManagerNettyBlockTransferServiceBlockManagerMasterBlockManagerCacheManager
MemoryManagerMemoryPoolExecutionMemoryPoolStorageMemoryPoolMemoryStoreUnifiedMemoryManager
LiveListenerBusMapOutputTrackerDAGSchedulerTaskSchedulerExecutorAllocationManagerOutputCommitCoordinatorContextClearner
LocalSparkClusterStandaloneMater/Executor/Worker的容错
StreamingContextReceiverDstream窗口操作
CatalogTreeNode词法解析器ParserRuleExecutorAnalyzer与OptimizerHive SQL相关
假如你对图计算Spark GraphX和机器学习Spark MLlib感兴趣,可以单独看看。
整个跟实时计算相关的包和类大部分都已经包含在上述目录中了。假如你在使用的过程中出现了问题,就需要针对其中的具体部门去看。
源码阅读是我们每一个开发者都需要经历的阶段,阅读源码的好处就不说了。你我都懂。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26692020/viewspace-3141072/ ,如需转载,请注明出处,否则将追究法律责任。