5.3 Spark编译

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

1.克隆Spark源码

命令如下:


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

这样从Github将Spark源码下载到本地,建立本地的仓库,如图5-14所示。

5.3 Spark编译 - 图1

图5-14 git clone Spark库

2.编译Spark

在Spark项目的根目录内执行编译和打包命令,命令如下:


  1. sbt/sbt assembly

如图5-15所示,执行过程中会解析依赖和下载需要的依赖Jar包。执行完成后,将所有Jar包打包为一个Jar包,即可运行Spark集群和示例了。

5.3 Spark编译 - 图2

图5-15 编译Spark源码

3.增量编译

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

1)编译打包一个assembly的Jar包。命令如下。


  1. $ sbt/sbt clean assembly

2)这时的Spark程序已经可以运行。用户可以进入Spark Shell执行程序。命令如下:


  1. $ ./bin/spark-shell

3)配置export SPARK_PREPEND_CLASSES参数为true,开启增量编译模式。命令如下:


  1. $ export SPARK_PREPEND_CLASSES=true

4)继续使用Spark Shell中的程序。通过下面命令进入Spark Shell。


  1. $ ./bin/spark-shell

5)这时可以对代码进行修改和二次开发。


  1. /*
  2. 开发……
  3. */

6)编译Spark源码。


  1. $ sbt/sbt compile
  2. /*
  3. 开发……
  4. */
  5. $ sbt/sbt compile

7)解除增量编译模式。


  1. $ unset SPARK_PREPEND_CLASSES

8)返回正常使用Spark Shell的情景。通过下面命令进入Spark Shell


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

9)如果不想每次都开启一个新的sbt会话,就可以在compile命令前加上~。命令如下:


  1. $ sbt/sbt ~compile

4.查看Spark源码依赖图

使用SBT查看依赖图,需要运行下面的命令,结果如图5-16所示。

5.3 Spark编译 - 图3

图5-16 查看依赖


  1. $ # sbt
  2. $ sbt/sbt dependency-tree

使用Maven查看依赖图,需要运行下面的命令。


  1. $ # Maven
  2. $ mvn -DskipTests install
  3. $ mvn dependencytree