如何单独构建Spark Mllib子模块

时间:2016-04-03 22:07:32

标签: maven apache-spark build apache-spark-mllib

我在Spark中修改了mllib,并希望在其他项目中使用自定义的mllib jar。当我使用以下方法构建spark时,它可以工作:

build/mvn -Pyarn -Phadoop-2.4 -Dhadoop.version=2.4.0 -DskipTests clean package

从Spark http://spark.apache.org/docs/latest/building-spark.html#building-submodules-individually的文件中了解到。但构建整个Spark包需要很长时间(在我的桌面上大约需要7分钟),所以我想单独构建mllib。在Spark中构建子模块的指令也来自同一个链接,我用过:

build/mvn -pl :spark-mllib_2.10 clean install

只需构建Mllib本身。它成功构建,但是,在运行使用mllib的其他项目时,我无法看到我在mllib中所做的更改。虽然当我从头开始构建整个Spark时这确实有用,但我想知道我应该如何使用maven来单独构建mllib?

1 个答案:

答案 0 :(得分:0)

我怀疑在运行应用程序时并没有真正使用已编译的mllib jar。因此,在运行应用程序时,通过在代码中添加以下行来打印出已修改类的位置:

logInfo(getClass.getProtectionDomain.getCodeSource.getLocation.getPath)

事实证明Spark正在使用spark-assembly-1.6.0-hadoop2.4.0.jar,它仍在使用旧的mllib jar。所以我改为使用:

编译mllib和assembly
build/mvn -DskipTests -pl :spark-mllib_2.10 install
build/mvn -Pyarn -Phadoop-2.4 -Dhadoop.version=2.4.0 -DskipTests -pl :spark-assembly_2.10 install

这使我的机器上的整个编译时间缩短了1分多钟。必须有更好的方法来进行增量编译比这需要更短的时间,我仍然在寻找这样的解决方案。但此刻,我将使用这个热门修复程序。