![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=1739285706-pMhjIE4TvUFAptG0MG8RcMAGaymuUxQn-0-f5e9dd735dd3d758d9d545862f8611d9)
图1-21 Spark官网
点击Download Spark按钮,在下一个页面找到Git地址,如图1-22所示。
![](https://epubservercos.yuewen.com/A53EC8/10771507603502206/epubprivate/OEBPS/Images/figure_0031_0002.jpg?sign=1739285706-jGnsWjIHkqSSguT1rWAXW77xzqvbxpEH-0-3b1b644ad7a914b02e2ba7133920125b)
图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=1739285706-1V8e2Kim474ZphJv3eMQoLLBNIEkY6Mk-0-f41c621f160959045f6fbb5f72620120)
图1-23 下载Spark源码
2. 构建Scala应用
进入Spark根目录,执行sbt命令。然后会下载和解析很多Jar包,要等待一段时间,笔者大概花费了一个多小时才执行完,如图1-24所示。
![](https://epubservercos.yuewen.com/A53EC8/10771507603502206/epubprivate/OEBPS/Images/figure_0031_0004.jpg?sign=1739285706-wf9ezPPzI7cL9VBPqBmrYgML3NtBKenX-0-6f6d9f7c5d4a723a4e622942ce5628b2)
图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=1739285706-yA6lM6n8AzuHAjm4orza6FIvq0etwVsu-0-1d8a2c31025259638073b3121231c1e2)
图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=1739285706-NaaKh7tRKtCtPR8l9jaJHsUvTIK2MUot-0-0d4bf1f493aabcaaeb6243965ad2ef4f)
图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=1739285706-0r3OiJMGOrVwq4qUKAQFhq1cwWwIIpiT-0-370f9cb42673669dc84783ce418f082c)
图1-27 导入Maven项目
点击Next按钮进入下一个对话框,如图1-28所示。
![](https://epubservercos.yuewen.com/A53EC8/10771507603502206/epubprivate/OEBPS/Images/figure_0033_0001.jpg?sign=1739285706-a7jrA3xMQUNuZDeGqQly8mKIyHkXElG2-0-5478287d10c56bc1a0f60bcef3b09949)
图1-28 选择Maven项目
全选所有项目,点击finish按钮,这样就完成了导入,如图1-29所示。
![](https://epubservercos.yuewen.com/A53EC8/10771507603502206/epubprivate/OEBPS/Images/figure_0034_0001.jpg?sign=1739285706-ArSJdc2MIlbDOOLXceere6w13xu48mmU-0-d347373b567f73998693a7452af0e90c)
图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=1739285706-OOUapGiyMU63eAILBmG3fySwtHssEFFX-0-1650861d9fac69ecbe41041dfb69d954)
图1-30 Java构建路径
Eclipse在对项目编译时,可能会出现很多错误,只要仔细分析报错原因就能一一排除。所有错误解决后运行mvn clean install,如图1-31所示。
![](https://epubservercos.yuewen.com/A53EC8/10771507603502206/epubprivate/OEBPS/Images/figure_0035_0001.jpg?sign=1739285706-c1ETUFNYs277oGqAf5Ph5cKmlVsQDnHV-0-391e97432b382de09c548b2d8d07efa5)
图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=1739285706-4ccF41qhNPXadzxJgF0sJVLw5PGmnmAw-0-53567f6c97ea2e2d201ed80c3cce4988)
图1-32 源码调试
读者也可以在Spark源码中设置断点,进行跟踪调试。