![Spark内核设计的艺术:架构设计与实现](https://wfqqreader-1252317822.image.myqcloud.com/cover/340/922340/b_922340.jpg)
1.4 Spark源码编译与调试
1. 下载Spark源码
首先,访问Spark官网http://spark.apache.org/,如图1-21所示。
![](https://epubservercos.yuewen.com/A53EC8/10771507603502206/epubprivate/OEBPS/Images/figure_0031_0001.jpg?sign=1739316934-HWsTpKDPz3KYfR5w2I4aFXwpToMCRLbU-0-71cb4733bbe04703f29ca6cfd5988904)
图1-21 Spark官网
点击Download Spark按钮,在下一个页面找到Git地址,如图1-22所示。
![](https://epubservercos.yuewen.com/A53EC8/10771507603502206/epubprivate/OEBPS/Images/figure_0031_0002.jpg?sign=1739316934-8xwCwAZzFvwY6TyG7MfH6fUFdNB0Zytl-0-54022c51f0c119acd2373bdf40c16849)
图1-22 Spark官方Git地址
笔者在当前用户目录下创建Source文件夹作为放置Spark源码的地方,进入此文件夹并输入git clone git://github.com/apache/spark.git命令将源码下载到本地,如图1-23所示。
![](https://epubservercos.yuewen.com/A53EC8/10771507603502206/epubprivate/OEBPS/Images/figure_0031_0003.jpg?sign=1739316934-wJ9zaGkHiicpNw3eEeWF93hoxOZy0z1J-0-91fa86e4086cef7a27a3b794cf8067e6)
图1-23 下载Spark源码
2. 构建Scala应用
进入Spark根目录,执行sbt命令。然后会下载和解析很多Jar包,要等待一段时间,笔者大概花费了一个多小时才执行完,如图1-24所示。
![](https://epubservercos.yuewen.com/A53EC8/10771507603502206/epubprivate/OEBPS/Images/figure_0031_0004.jpg?sign=1739316934-lUjcSrx6XLNykDRZRZyXHflnNNj7FRgk-0-e2d10c2d8b91f52ce364a7e2f1937607)
图1-24 构建Scala应用
从图1-24中可以看出,sbt构建完毕时会出现提示符“>”。
3. 使用sbt生成Eclipse工程文件
在sbt命令出现提示符“>”后,输入eclipse命令,开始生成Eclipse工程文件,也需要花费很长的时间,笔者大致花费了40分钟。完成时的状况如图1-25所示。
![](https://epubservercos.yuewen.com/A53EC8/10771507603502206/epubprivate/OEBPS/Images/figure_0032_0001.jpg?sign=1739316934-uEGqllNFcJSPHJYsaC4H2U693xPr5m0M-0-b500fd963d7d83e4b23de04669262923)
图1-25 sbt编译过程
现在我们查看Spark下的子文件夹,发现其中都生成了.project和.classpath文件。比如mllib项目下就生成了.project和.classpath文件,如图1-26所示。
![](https://epubservercos.yuewen.com/A53EC8/10771507603502206/epubprivate/OEBPS/Images/figure_0032_0002.jpg?sign=1739316934-cnD8RACD2V8acZFrBNmdEx3XdNiil2bZ-0-4c77cc97f104fbb1c5bee3f6bf9ac08a)
图1-26 sbt生成的项目文件
4. 编译Spark源码
由于Spark使用Maven作为项目管理工具,所以需要将Spark项目作为Maven项目导入到Eclipse中,如图1-27所示。
![](https://epubservercos.yuewen.com/A53EC8/10771507603502206/epubprivate/OEBPS/Images/figure_0032_0003.jpg?sign=1739316934-OIhzr8EctMJcO9VPrQRFHSzdphUCF7zF-0-4081cab6a24c6c02f24ec36f2577789d)
图1-27 导入Maven项目
点击Next按钮进入下一个对话框,如图1-28所示。
![](https://epubservercos.yuewen.com/A53EC8/10771507603502206/epubprivate/OEBPS/Images/figure_0033_0001.jpg?sign=1739316934-9dhPyHKaFSB75Oembf7iba9mnue5kp86-0-4224a84deab44c70f57a8da1734c3464)
图1-28 选择Maven项目
全选所有项目,点击finish按钮,这样就完成了导入,如图1-29所示。
![](https://epubservercos.yuewen.com/A53EC8/10771507603502206/epubprivate/OEBPS/Images/figure_0034_0001.jpg?sign=1739316934-kFzY9j8vvMt0NQlVGgge4OknamhJa1nz-0-e5eaaca0a1dad8155bcc3c8bd16b535f)
图1-29 导入完成的项目
导入完成后,需要设置每个子项目的Build Path。右击每个项目,选择Build Path→Configure Build Path命令,打开Java Build Path对话框,如图1-30所示。
![](https://epubservercos.yuewen.com/A53EC8/10771507603502206/epubprivate/OEBPS/Images/figure_0034_0002.jpg?sign=1739316934-olp0O5gofvx7OUc1Pf64Uds5NWJRxVOW-0-2f98d4c747ca9277d3a5f8f1db7424c0)
图1-30 Java构建路径
Eclipse在对项目编译时,可能会出现很多错误,只要仔细分析报错原因就能一一排除。所有错误解决后运行mvn clean install,如图1-31所示。
![](https://epubservercos.yuewen.com/A53EC8/10771507603502206/epubprivate/OEBPS/Images/figure_0035_0001.jpg?sign=1739316934-ULV8MGr7tQdxVB89Zd0LIziAK63XtK9A-0-0050fe6923aa562bc111fff507b559b1)
图1-31 编译成功
5. 调试Spark源码
以Spark源码自带的JavaWordCount为例,介绍如何调试Spark源码。右击JavaWordCount.java,选择Debug As→Java Application命令即可。如果想修改配置参数,右击JavaWordCount.java,选择Debug As→Debug Configurations命令,从打开的对话框中选择JavaWordCount,在右侧区域可以修改Java执行参数、JRE、classpath、环境变量等配置,如图1-32所示。
![](https://epubservercos.yuewen.com/A53EC8/10771507603502206/epubprivate/OEBPS/Images/figure_0035_0002.jpg?sign=1739316934-3FqmCHCgnBh5RQD2JB6d7wkKrAwZuPZV-0-58bd267afb29f9c545b6d5d9a7210978)
图1-32 源码调试
读者也可以在Spark源码中设置断点,进行跟踪调试。