构建自己的Spark库

获取Spark源码

开发中难免需要修改Spark源码, 构建自己的Spark库, 并在自己的项目中引用. 下面来说一下具体步骤.

有两个方法:

  1. 从 github 上 clone. 但是如果直接 clone 的话,获取到的是最新的,正在开发的版本,并不稳定. 想要获取之前版本的话, 要指定版本:
    git clone git://github.com/apache/spark.git -b branch-2.2
    我要用的版本是2.1.1, 而2.2中包含了2.1的稳定版, 所以 clone 了2.2的
  2. spark官网上下载,指定版本并且选择 package type 为 source code.

构建项目

先验一下货. 进入到spark的根目录, 打开控制台, 执行以下命令

1
2
3
$ build/mvn -DskipTests clean package
# or
$ build/sbt -DskipTests clean package

使用 maven 是 maven 会自带zinc加速编译, 但是根据目前的体验来说,并木有感受到. 总的来说, sbt和maven其实在这方面是差不多的.
接下来就是等了, 完成了之后可以在根目录下的./assembly/target/scala-2.11/jars 的这个目录里找到所有生成的 jar 文件, 然后在自己的项目里添加 External Libraries, 把整个文件夹加进去,就可以成功引用Spark里面所有的东西了.

修改并编译

修改代码很简单了, 找到你要修改的文件并修改就行了. 或者新创建一个文件扩展功能也可以. 但是要注意的是 Spark 项目使用了 Scala-style-check, 该插件会检查代码格式, 不符合格式的话会编译不通过. sbt 提供了增量式编译功能, 使用 /build/sbt compile 命令会在修改过的 module 的目录下生成新的 jar 文件, 路径为 ./module/target/scala-2.11/. 但是由于我的项目是直接引用上面的整个文件夹, 增量式编译并不适用. 所以还是要使用 package 选项构建项目.

参考资料