2.3 Spark编译

用户可以通过Spark的默认构建工具SBT进行源码的编译和打包。当用户需要对源码进行二次开发时,则需要对源码进行增量编译,通过下面的方式读者可以实现编译和增量编译。

(1)克隆Spark源码

可通过克隆的方式克隆Spark源码,如图2-9所示。


git clone https:// github.com/apache/spark

图2-9 git clone Spark库

这样将会从github将Spark源码下载到本地,建立本地的仓库。

(2)编译Spark源码

在Spark项目的根目录内执行编译和打包命令(如图2-10所示)。


sbt/sbt assembly

执行过程中会解析依赖和下载需要的依赖jar包。执行完成后会将所有jar包打包为一个jar包,用户便可以运行Spark集群和示例了。

(3)增量编译

在有些情况下,用户需要修改源码,修改之后如果每次都重新下载jar包或者对全部源码重新编译一遍,会很浪费时间,用户通过下面的增量编译方法,可以只对改变的源码进行编译。

编译打包一个assembly的jar包。


$ sbt/sbt clean assembly 

图2-10 编译Spark源码

这时的Spark程序已经可以运行。用户可以进入spark-shell执行程序。


$ ./bin/spark-shell 

配置export SPARK_PREPEND_CLASSES参数为true,开启增量编译模式。


$ export SPARK_PREPEND_CLASSES=true

继续使用spark-shell中的程序:


$ ./bin/spark-shell 

这时用户可以对代码进行修改和二次开发:初始开发Spark应用,之后编译。

编译Spark源码:


$ sbt/sbt compile

继续开发Spark应用,之后编译。


$ sbt/sbt compile

解除增量编译模式:


$ unset SPARK_PREPEND_CLASSES

返回正常使用spark-shell的情景。


$ ./bin/spark-shell # Back to normal, using Spark classes from the assembly Jar

如果用户不想每次都开启一个新的SBT会话,可以在compile命令前加上~。


$ sbt/sbt ~ compile

(4)查看Spark源码依赖图

如果使用SBT进行查看依赖图(如图2-11所示),用户需要运行下面的命令:


$ # sbt
$ sbt/sbt dependency-tree

如果使用Maven进行查看依赖图(如图2-11所示),用户需要运行下面的命令:


$ # Maven
$ mvn -DskipTests install
$ mvn dependency:tree

图2-11 查看依赖图