2016-04-03 17 views
2

Ich modifizierte die MLLIB in Spark und möchte das angepasste mllib Jar in anderen Projekten verwenden. Es funktioniert, wenn ich bauen Funke mit:Wie man Spark Mllib Submodul einzeln erstellt

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

gelernt von Spark Dokument http://spark.apache.org/docs/latest/building-spark.html#building-submodules-individually. Aber das gesamte Spark-Paket zu bauen, hat ziemlich lange gedauert (ungefähr 7 Minuten auf meinem Desktop), daher würde ich gerne nur das mllib selbst erstellen. Die Anweisung für ein Submodul in Spark-Gebäude ist auch aus dem gleichen Link und ich:

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

nur Mllib selbst zu bauen. Es wurde erfolgreich erstellt, aber ich konnte die Änderungen, die ich in der mllib vorgenommen habe, nicht sehen, wenn ich andere Projekte mit mllib ausführe. Während dies funktionierte, wenn ich den gesamten Spark von Grund auf neu erstellte, frage ich mich, wie ich Maven verwenden sollte, um den mllib individuell aufzubauen?

Antwort

0

Ich vermutete, dass das kompilierte mllib jar nicht wirklich verwendet wird, wenn die Anwendung ausgeführt wird. So drucke ich die Position der modifizierten Klasse, wenn die Anwendung ausgeführt wird durch das Hinzufügen dieser Zeile im Code:

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

Und es stellte sich heraus, dass Spark mit der Funken Montage-1.6.0-hadoop2.4.0. Glas, und es verwendet immer noch das alte mllib-Glas. Also habe ich zusammengestellt, anstatt beide mllib und Montage durch den Einsatz:

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 

Diese die ganze Compilierung Zeit auf ein wenig reduziert über 1 Minute auf meinem Rechner. Es muss eine bessere Methode für die inkrementelle Kompilierung geben als diese, die viel kürzer dauert. Ich suche immer noch nach einer solchen Lösung. Aber im Moment werde ich diesen Hotfix benutzen.

Verwandte Themen