Apache spark 如何使用修改后的Spark MLlib模块作为依赖项?
我想构建一个Spark应用程序Jar。我的期望是:当我通过Apache spark 如何使用修改后的Spark MLlib模块作为依赖项?,apache-spark,amazon-ec2,sbt,apache-spark-mllib,sbt-assembly,Apache Spark,Amazon Ec2,Sbt,Apache Spark Mllib,Sbt Assembly,我想构建一个Spark应用程序Jar。我的期望是:当我通过/spark submit执行jar时,应用程序将使用我自己构建的mllib(例如:spark-mllib_2.11-2.2.0-SNAPSHOT.jar) 这是我的build.sbt: name:="SoftmaxMNIST" version := "1.0" scalaVersion := "2.11.4" unmanagedJars in Compile += file("lib/spark-mllib_2.11-2.2.0-SNA
/spark submit
执行jar时,应用程序将使用我自己构建的mllib(例如:spark-mllib_2.11-2.2.0-SNAPSHOT.jar
)
这是我的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
}
}
name:=“SoftmaxMNIST”
版本:=“1.0”
规模规避:=“2.11.4”
Compile+=文件(“lib/spark-mllib_2.11-2.2.0-SNAPSHOT.jar”)中的unmanagedJars
libraryDependencies++=Seq(
“org.apache.spark”%%“spark核心”%%“2.1.0”,
“org.apache.spark”%%“spark sql”%%”2.1.0
)
//META-INF丢弃
程序集mergeStrategy.discard中的mergeStrategy
案例x=>MergeStrategy.first
}
}
我已经将自己构建的spark-mllib_2.11-2.2.0-SNAPSHOT.jar
放到/my Project Path/lib/
目录中。但它不起作用。应用程序似乎仍在使用spark的默认mllib jar
,在我的情况下,它位于Path/spark-2.1.0-bin-hadoop2.7/jars/
目录中
PS:最终目的是,当我在AWS EC2上运行我的应用程序时,我的应用程序总是使用我自己构建的mllib
,而不是默认的。我可以经常修改我自己的mllib
谁能帮我解决这个问题。提前谢谢!答案取决于你如何
spark submit
。你必须“说服”(aka modify)spark submit
才能看到修改过的jar(而不是spark\u HOME
中的jar)
最快的(从长远来看不一定是最简单的)方法是在uberjar(又名fat jar)中包含Spark jar,包括您修改过的Spark jar。您似乎在sbt项目中使用sbt汇编插件,所以这只是依赖项的问题(或放入lib
目录)并将其添加到项目中的libraryDependencies
。Assembly
将完成其余工作
然而,这将给您一个非常巨大的jar,在繁重的开发周期中,大量的编译、测试和部署可能会使过程非常缓慢
另一种方法是使用定制的ApacheSpark(包括Spark MLlib的修改库)。安装mvn
后,您就可以使用定制的Spark了。使用定制版本中的Spark submit
,它应该可以工作。您不必将jar包含在fat jar中,也可能不必使用任何sbt汇编插件(只需一个sbt包
就可以了)
这种方法的好处是使您的可部署Spark应用程序包更小,并且自定义Spark与开发过程保持分离。使用内部库存储库来发布和依赖