0

SparkアプリケーションJarをビルドしたいと思います。私の期待は:私が瓶を./spark-submitで実行すると、アプリケーションは私自身のビルドされたmllib(例:spark-mllib_2.11-2.2.0-SNAPSHOT.jarを利用します。modified Spark MLlibモジュールを依存関係として使用する方法は?

これは私のbuild.sbtです:

name:="SoftmaxMNIST" 
version := "1.0" 
scalaVersion := "2.11.4" 
unmanagedJars in Compile += file("lib/spark-mllib_2.11-2.2.0-SNAPSHOT.jar") 

libraryDependencies ++= Seq(
"org.apache.spark" %% "spark-core" % "2.1.0", 
"org.apache.spark" %% "spark-sql" % "2.1.0 
) 

// META-INF discarding 
mergeStrategy in assembly <<= (mergeStrategy in assembly) { (old) => 
{ 
    case PathList("META-INF", xs @ _*) => MergeStrategy.discard 
    case x => MergeStrategy.first 
} 
} 

私はすでに/My-Project-Path/lib/ディレクトリにして自分の内蔵spark-mllib_2.11-2.2.0-SNAPSHOT.jarを落としました。しかし、それは動作しません。私はAWS EC2上で自分のアプリケーションを実行すると、究極の目的は、私のアプリケーションは、常に自分自身を使用していること:アプリケーションがまだそれが

PS PATH/spark-2.1.0-bin-hadoop2.7/jars/ディレクトリにある私の場合にはスパークのデフォルトmllib jarを、使用しているようです-built mllibデフォルトのものの代わりに。私は自分のmllibを頻繁に変更することがあります。

誰でも私がこれを解決するのを手助けできますか?前もって感謝します!

答えて

1

答えはあなたのやり方によって異なります​​。変更されたjar(SPARK_HOMEのものではありません)を表示するには、​​を「納得させる」(別名変更する)必要があります。

あなたが変更したスパークジャーを含め、スパークジャーをuberjar(別名ファットジャー)に含めることが最も簡単です(長期的には必ずしも簡単ではありません)。 sbtプロジェクトでsbt-assemblyプラグインを使用しているようですので、publishLocalの依存関係(またはlibディレクトリに入れてください)をプロジェクト内のlibraryDependenciesに追加してください。 assembleは残りを行います。

しかし、コンパイルやテスト、デプロイメントが多い開発サイクルでは、プロセスが非常に遅くなる可能性があります。

カスタムApache Spark(Spark MLlib用に修正されたライブラリを含む)を使用する方法もあります。 mvn installの後、あなたはカスタムスパークを使用する準備が整います。カスタムバージョンの​​を使用してください。これは動作するはずです。あなたは、あなたの太った瓶に瓶を入れる必要はありません。おそらく、sbt-assemblyプラグインを使用する必要はありません(ちょうどsbt packageが動作するはずです)。

このアプローチは、展開可能なSparkアプリケーションパッケージを小さくし、カスタムSparkを開発プロセスから分離するという利点があります。内部ライブラリリポジトリを使用して公開し、依存する。

関連する問題