源码阅读环境搭建
我这周都在抽时间尝试把Spark源码编译成功。刚开始我选择的版本是 2.3+ 发现怎么都编译不成功。遇到的一个问题是 scala-maven-plugin compile failed, 查版本号,修改版本后尝试未果。选早一点的版本的想法是说,阅读源码可能会少一些,毕竟版本越高,代码越庞大和复杂。
但是早期的版本已经是过去式了,依赖的其他包库也会修改和引入新的特性,编译失败卡的时间太久了,不值得投入,遂直接拥抱 Spark 3.0
编译源码
去 github 上克隆一份代码,切换到你想看的 Spark 版本。
git clone
git checkout branch-3.0
Spark 官方网站上就有非常详细的步骤告诉你怎么编译。https://spark.apache.org/docs/3.0.0/building-spark.html
具体的,我执行了如下几步。这几步的细节在这里就不展开了,可以Google安装这些版本的依赖。
- 安装 mvn 3.6.3
- 安装 Java 8
- 安装 Scala 2.12
- 确保自己的安装环境有 git
- 执行如下命令,让 mvn 可使用的内存增加
export MAVEN_OPTS="-Xmx2g -XX:ReservedCodeCacheSize=1g"
编译过程需要花不少时间,有个地方下载速度非常慢。主要是从maven仓库中下载依赖,
Downloading from gcs-maven-central-mirror
解决方法是修改Spark源码根目录下的 pom.xml文件,在文件中查找所有的 gcs-maven-central-mirror(不止一个地方),并把URL 改为阿里云的仓库地址。
<repository>
<id>gcs-maven-central-mirror</id>
<name>GCS Maven Central mirror</name>
<url>https://maven.aliyun.com/repository/public/</url>
<releases> <enabled>true</enabled>
</releases> <snapshots> <enabled>false</enabled>
</snapshots>
</repository>
最后执行:
mvn -Pyarn -Phive -Phive-thriftserver -Dhadoop.version=2.8.5 -DskipTests clean package -e
经过漫长的等待,就可以编译完成啦!

如何食用代码
首先官方是推荐使用 Intellij IDEA 去阅读和开发源码的。导入 Intellij也非常的简单,通过 pom.xml 导入为项目即可。
一些有用的快捷键:
command + o : search classes
command + b : go to implementation
command + [ : go back to the previous location
shift + command + F : search files
到此,就可以愉快地阅读源码啦。如果你不知道从哪里开始读,推荐看看下面的一些文件。
SparkSubmit.scala
Master.scala
Worker.scala
StandaloneAppClient.scala
Reference
- 大码王: https://www.cnblogs.com/huanghanyu/category/1774530.html
- littlemagic:https://so.youkuaiyun.com/so/search?q=spark%20core&t=blog&u=nazeniwaresakini&urw=
- tobe:https://www.zhihu.com/people/tec-ck/posts?page=3
- https://www.jianshu.com/p/3a9b26687d9c
- https://blog.youkuaiyun.com/luyanbin_lqq/article/details/105579233
- 写的很详细,参考一下吧 https://linbojin.github.io/2016/01/09/Reading-Spark-Souce-Code-in-IntelliJ-IDEA/

本文详细记录了作者在尝试编译Spark 3.0源码过程中遇到的问题、解决方案,包括升级版本、依赖库调整、仓库替换及代码导入工具的使用。适合想要深入理解Spark源码的开发者参考。
1698

被折叠的 条评论
为什么被折叠?



