针对DataStax Enterprise的运行时类路径构建Spark应用程序

时间:2016-03-13 11:11:33

标签: java scala apache-spark datastax datastax-enterprise

我有Spark的DataStax Enterprise 4.8。我想使用Gradle构建一个用Scala编写的Spark应用程序,并在此DSE集群上运行它,但我想在运行时避免任何类路径问题。

目前我的编译时依赖项(和冲突解决方案)由Gradle自动管理,它已经在运行时引发了各种问题。

标准方式是什么?我想避免构建一个包含所有依赖项的fat-jar。

1 个答案:

答案 0 :(得分:3)

我只会使用dse spark-classpath命令提供的库。我会将它合并到构建文件中,如

对于SBT

val sparkClasspathStr = s"$DSE_HOME/bin/dse spark-classpath".!!.trim
val sparkClasspathArr = sparkClasspathStr.split(':')

//Find all Jars on dse spark-classpath
val sparkClasspath = {
  for ( dseJar <- sparkClasspathArr if dseJar.endsWith("jar"))
    yield Attributed.blank(file(dseJar))
}.toSeq

//Your dependencies
//libraryDependencies += "com.github.scopt" %% "scopt" % "3.2.0"

//Add dse jars to classpath
unmanagedJars in Compile ++= sparkClasspath
unmanagedJars in Test ++= sparkClasspath

摇篮

def DSE_HOME = (System.getenv("DSE_HOME") != null) ? System.getenv("DSE_HOME") : System.getenv("HOME")+"dse"

def sparkClasspathStr = (DSE_HOME + "/bin/dse spark-classpath").execute().text.trim()
def sparkClasspathJars = sparkClasspathStr.split(":").findAll{ it.endsWith(".jar") }

dependencies {
    compile files(sparkClasspathJars)
}