在对 Spark 有了一定使用经验后,为了能够跟进 Spark 源代码的开发进展,对其源代码进行详细的阅读分析,本文详细说明了如何使用 IntelliJ IDEA 从 Github 上导入最新的 Spark 源代码,并对其进行编译。
准备工作
首先你的系统中需要安装了 JDK 1.6+,并且安装了 Scala。之后下载最新版的 IntelliJ IDEA 后,首先安装(第一次打开会推荐你安装)Scala 插件,相关方法就不多说了。至此,你的系统中应该可以在命令行中运行 Scala。我的系统环境如下:
1. Mac OS X(10.9.5)
2. JDK 1.7.71
3. Scala 2.10.4
4. IntelliJ IDEA 14
另外,最后还是建议大家开始先使用 pre-built 的 Spark,对 Spark 的运行、使用方法有所了解,编写了一些 Spark 应用程序后再展开源代码的阅读,并尝试修改源码,进行手动编译。
从 Github 导入 Spark 工程(下次有更新直接更新即可)
打开IntelliJ IDEA 后,在菜单栏中选择 VCS→Check out from Version Control→Git,之后在 Git Repository URL 中填入 Spark 项目的地址,并指定好本地路径,如下图所示。
点击该窗口中的的 Clone 后,开始从 Github 中 clone 该项目,该过程试你网速而定,大概需要3-10分钟。
生成Intellij IDEA .idea文件(这样可以导入IDEA开发器)
sbt/sbt gen-idea
编译 Spark(这么可以生成一个spark包,导入其他项目使用)
当 clone 完毕后,IntelliJ IDEA 会自动提示你该项目有对应的 pom.xml 文件,是否打开。这里直接选择 Open 该 pom.xml 文件,然后系统会自动解析项目的相关依赖,该步骤也会因你的网络和系统相关环境,所需时间不同。
该步骤完成之后,请手动编辑 Spark 根目录下的 pom.xml 文件,找到其中指定 java 版本的那一行(java.version),根据你的系统环境,如果使用的是 jdk1.7 ,那么或许需要你将其值改成1.7(默认是1.6)。
之后打开 shell 终端,在命令行中进入刚才导入的 spark 项目根目录,执行
sbt/sbt assembly
该编译命令将全部采用默认的配置来编译 Spark,若想指定相关组件的版本,可以查看 Spark 官网中的 Build-Spark(http://spark.apache.org/docs/latest/building-spark.html),查看所有常用的编译选项。该过程目前不需要 VPN 即可完成,为了预估编译所需的时间,你可以在新开一个 shell 终端,不断查看 spark 项目目录的大小,我最终采用默认配置,编译成功后的 spark 目录大小为2.0G。
结束语
至此,为了检验你的编译结果,可以在命令行中进入 spark/bin 目录,运行 spark-shell,若一切都正常启动,则编译成功。若你修改了 Spark 的源码,可以重新使用 sbt 来进行编译,并且编译的时间不会像第一次编译那么长。
遇到错误记录:
在使用sbt对spark源代码进行编译之后(流程请查看上一篇博客http://blog.csdn.net/zhaoyunxiang721/article/details/49096507),使用idea来build源代码时可能会出现
如下错误:
Error:(45, 66) not found: type SparkFlumeProtocol
val transactionTimeout: Int, val backOffInterval: Int) extends SparkFlumeProtocol with Logging {
^
...
Error:(25, 27) not found: type EventBatch
def isErrorBatch(batch: EventBatch): Boolean = {
^
Error:(86, 51) not found: type SparkFlumeProtocol
val responder = new SpecificResponder(classOf[SparkFlumeProtocol], handler.get)
^
这一堆错误都出现在spark源码目录的external文件夹中...
解决方案:
我觉得出现这个问题的原因还是在对源码进行gen-idea的过程中下载需要的jar包时出现问题导致需要的jar包不全,我现在虽然可以编译成功了,但是具体的解决方案仍然不清楚,因为我同时做了如下2件事:
1.依次点击:View -> Tool Windows -> Maven Projects ->Generate Sources and Update Folders For All Projects(两个箭头首尾相连的那个按钮),然后等待...(这个过程如果你需要关闭idea,请随意,因为重启idea后他会继续...)
2.重复在spark源码目录下进行sbt->gen-idea的操作,让他自己在那下载不用管
然后过了随机长度的时间后你再重新build spark的源代码的时候,你就会惊奇的发现,突然通了...(虽然会有超级多的警告)
来源:oschina
链接:https://my.oschina.net/u/1434405/blog/526057