本节书摘来自华章社区《Spark大数据分析实战》一书中的第2章,第2.3节Spark编译,作者高彦杰 倪亚宇,更多章节内容可以访问云栖社区“华章社区”公众号查看
2.3 Spark编译
用户可以通过Spark的默认构建工具SBT进行源码的编译和打包。当用户需要对源码进行二次开发时,则需要对源码进行增量编译,通过下面的方式读者可以实现编译和增量编译。
(1)克隆Spark源码
可通过克隆的方式克隆Spark源码,如图2-9所示。
git clone https:// github.com/apache/spark
这样将会从github将Spark源码下载到本地,建立本地的仓库。
(2)编译Spark源码
在Spark项目的根目录内执行编译和打包命令(如图2-10所示)。
sbt/sbt assembly
执行过程中会解析依赖和下载需要的依赖jar包。执行完成后会将所有jar包打包为一个jar包,用户便可以运行Spark集群和示例了。
(3)增量编译
在有些情况下,用户需要修改源码,修改之后如果每次都重新下载jar包或者对全部源码重新编译一遍,会很浪费时间,用户通过下面的增量编译方法,可以只对改变的源码进行编译。
编译打包一个assembly的jar包。
$ sbt/sbt clean assembly
这时的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