![深入理解Spark:核心思想与源码分析](https://wfqqreader-1252317822.image.myqcloud.com/cover/246/805246/b_805246.jpg)
1.4 Spark源码编译与调试
1.下载Spark源码
首先,访问Spark官网http://spark.apache.org/,如图1-18所示。
![](https://epubservercos.yuewen.com/DF9B6D/3590882403677201/epubprivate/OEBPS/Images/1a18-i.jpg?sign=1738902905-0oAXRiPNHddy5ZFtubkOPmUXIHujV0W7-0-6badd970e9e1c0d4e30ec0b6ade543c8)
图1-18 Spark官网
单击Download Spark按钮,在下一个页面找到git地址,如图1-19所示。
![](https://epubservercos.yuewen.com/DF9B6D/3590882403677201/epubprivate/OEBPS/Images/1a19-i.jpg?sign=1738902905-T77X1vTe23Z44rSo2XcjONOmc9scB1wJ-0-08f66e1b197e921f9dbe40ebcddb0f5e)
图1-19 Spark官方git地址
打开Git Bash工具,输入git clone git://github.com/apache/spark.git命令将源码下载到本地,如图1-20所示。
![](https://epubservercos.yuewen.com/DF9B6D/3590882403677201/epubprivate/OEBPS/Images/1a20-i.jpg?sign=1738902905-7aVyEVwo63tubvxNtwhsifbUMdZMEbzF-0-aba9b12f09e6d266855f65df0327a5b2)
图1-20 下载Spark源码
2.构建Scala应用
使用cmd命令行进到Spark根目录,执行sbt命令。会下载和解析很多jar包,要等很长时间,笔者大概花了一个多小时才执行完。
3.使用sbt生成Eclipse工程文件
等sbt提示符(>)出现后,输入Eclipse命令,开始生成Eclipse工程文件,也需要花费很长时间,笔者本地大致花了40分钟。完成时的状况如图1-21所示。
![](https://epubservercos.yuewen.com/DF9B6D/3590882403677201/epubprivate/OEBPS/Images/1a21-i.jpg?sign=1738902905-7TQAa9m1DsnyzIkTNwXIZR5WWmM3nTtL-0-e7d7495c920e1957d29c6e9887052f52)
图1-21 sbt编译过程
现在我们查看Spark下的子文件夹,发现其中都生成了.project和.classpath文件。比如mllib项目下就生成了.project和.classpath文件,如图1-22所示。
![](https://epubservercos.yuewen.com/DF9B6D/3590882403677201/epubprivate/OEBPS/Images/1a22-i.jpg?sign=1738902905-1fgEEx5JztmiACuHF75ZjNFABYmc5rwu-0-9f9f153bed6b4cc3ed9d52462fc5f8d7)
图1-22 sbt生成的项目文件
4.编译Spark源码
由于Spark使用Maven作为项目管理工具,所以需要将Spark项目作为Maven项目导入Eclipse中,如图1-23所示。
![](https://epubservercos.yuewen.com/DF9B6D/3590882403677201/epubprivate/OEBPS/Images/1a23-i.jpg?sign=1738902905-R528K3zNIhxG5DYlLrN058MFBKcjGI8O-0-c485368e63cb1e6a154d0ffef67e5654)
图1-23 导入Maven项目
单击Next按钮进入下一个对话框,如图1-24所示。
![](https://epubservercos.yuewen.com/DF9B6D/3590882403677201/epubprivate/OEBPS/Images/1a24-i.jpg?sign=1738902905-uVwplP3cVcCAcoEpCTFgU7Ay9O1tMFzR-0-1287608a005a980410f94ff881795957)
图1-24 选择Maven项目
全选所有项目,单击Finish按钮,这样就完成了导入,如图1-25所示。
![](https://epubservercos.yuewen.com/DF9B6D/3590882403677201/epubprivate/OEBPS/Images/1a25-i.jpg?sign=1738902905-jSk9nRuLXqw5jQH2zOZg3tHudGwe4jVH-0-08c5464a3ec4796949f81dc53ddbd279)
图1-25 导入完成的项目
导入完成后,需要设置每个子项目的build path。右击每个项目,选择“Build Path”→“Configure Build Path…”,打开Java Build Path界面,如图1-26所示。
![](https://epubservercos.yuewen.com/DF9B6D/3590882403677201/epubprivate/OEBPS/Images/1a26-i.jpg?sign=1738902905-X6zaYW9pgCZjOquhkMsCRB5a9uXmkKeS-0-ff499d86d1c22bfea1b3b00df07890fd)
图1-26 Java编译目录
单击Add External JARs按钮,将Spark项目下的lib_managed文件夹的子文件夹bundles和jars内的jar包添加进来。
注意
lib_managed/jars文件夹下有很多打好的spark的包,比如:spark-catalyst_2.10-1.3.2-SNAPSHOT.jar。这些jar包有可能与你下载的Spark源码的版本不一致,导致你在调试源码时,发生jar包冲突。所以请将它们排除出去。
Eclipse在对项目编译时,笔者本地出现了很多错误,有关这些错误的解决建议参见附录H。所有错误解决后运行mvn clean install,如图1-27所示。
![](https://epubservercos.yuewen.com/DF9B6D/3590882403677201/epubprivate/OEBPS/Images/1a27-i.jpg?sign=1738902905-KzMjc61Fe1SwlwUhcidPOmuii6YWjESK-0-205957784fef49271c5c9a0bd75e2374)
图1-27 编译成功
5.调试Spark源码
以Spark源码自带的JavaWordCount为例,介绍如何调试Spark源码。右击JavaWord-Count.java,选择“Debug As”→“Java Application”即可。如果想修改配置参数,右击JavaWordCount.java,选择“Debug As”→“Debug Configurations…”,从打开的对话框中选择JavaWordCount,在右侧标签可以修改Java执行参数、JRE、classpath、环境变量等配置,如图1-28所示。
![](https://epubservercos.yuewen.com/DF9B6D/3590882403677201/epubprivate/OEBPS/Images/1a28-i.jpg?sign=1738902905-PvpBLGVrYNKmBCf8zhA5Ilyy78i4PfpD-0-6da4407bc302df74b00a2b6687f1c969)
图1-28 源码调试
读者也可以在Spark源码中设置断点,进行跟踪调试。