本文主要写的内容是从spark官网上下载spark源代码,然后通过Maven对其进行编译打包,并且运用该jar包的过程,完全是新手级操作。但第一次操作时还是遇到了许多问题,简单的记录下自己正确的解决过程。
由于是在windows下进行的操作,所以下述代码都是在git bash中运行。(主要是windows下./build/mvn这样的操作无法使用)
首先设置Maven的内存:
export MAVEN_OPTS="-Xmx2g -XX:ReservedCodeCacheSize=512m"
由于我在将来只打算对spark内的随机森林源代码做出一些修改,所以并不需要将所有模块都编译成jar包。
通过-pl选项,只build相应的子模块如mllib。通过-DskipTests选项跳过对test的build。在本地的源文件目录下如:/d/spark-2.3.0-source下执行如下代码
./build/mvn -pl :spark-mllib_2.11 -DskipTests clean package
由于在mllib中有些操作(Vectors从mllib转化到ml里)需要用到spark-mllib-local_2.11包里的类,所以在第一次使用编译的子模块时还需要:
./build/mvn -pl :spark-mllib-local_2.11 -DskipTests clean package
通过在Intellij IDEA中的Project Structure中将上述两个子模块的jar包导入。
在使用我们自己编译的spark源码jar包时,由于mllib的Vectors中有依赖到breeze包,所以需要在我们的pom文件的依赖中添加:
<dependency>
<groupId>org.scalanlp</groupId>
<artifactId>breeze_2.11</artifactId>
<version>0.13.2</version>
</dependency>
至此我们便完成了将spark源码编译打包并且使用的过程。