Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 根据DataStax Enterprise的运行时类路径构建Spark应用程序_Java_Scala_Apache Spark_Datastax_Datastax Enterprise - Fatal编程技术网

Java 根据DataStax Enterprise的运行时类路径构建Spark应用程序

Java 根据DataStax Enterprise的运行时类路径构建Spark应用程序,java,scala,apache-spark,datastax,datastax-enterprise,Java,Scala,Apache Spark,Datastax,Datastax Enterprise,我有一个带有Spark的Datasax Enterprise 4.8。我希望使用Gradle构建一个用Scala编写的Spark应用程序,并在这个DSE集群上运行它,但我希望在运行时避免任何类路径问题 目前,我的编译时依赖项(和冲突解决)由Gradle自动管理,这在运行时已经引起了各种问题 标准方式是什么?我希望避免构建包含所有依赖项的胖jar。我只想使用dse spark classpath命令提供的库。我会像这样将其合并到构建文件中 用于SBT val sparkClasspathStr =

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

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


标准方式是什么?我希望避免构建包含所有依赖项的胖jar。

我只想使用
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

目前,我的编译时依赖项(和冲突解决)由Gradle自动管理,这在运行时已经引起了各种问题。标准方法是修复这些运行时冲突,以允许您构建更易于部署的胖jar。问题是,我只知道运行时jar的名称。您知道哪些jar会导致问题吗?更具体地说,您能在编译时看到哪些类冲突吗?我正试图避免这个试错过程。这对我来说一点也不“标准”。我想绝对确保我的编译时类路径与运行时类路径相同。否则你怎么知道哪些类有版本控制问题?我不确定我是否理解您的要求。这有一点帮助,但它仍然不能解决具有冲突传递依赖关系的问题。我的意思是,当我的项目使用依赖于B版本2的库a,但DSE spark类路径包含B版本1时。事实上,我甚至不知道spark类路径上有B,因为DSE不为这些JAR提供POM文件。我只知道文件名,我只能猜测组名和工件名。spark类路径上所有jar的POM文件将非常有用。我还假设所有JAR都可以在Maven central上使用。嗯,我不确定我们目前是否提供Pom版本,但几乎所有的库都可以在Maven central上使用。有一些DEP是DSE专有的,但它们不应该成为问题。通常在合并第三方LIB时,我会尝试构建胖罐子,但我知道如果您有番石榴或Netty,您很容易遇到传递问题。是否可以提供至少一份所有DSE专有罐子的列表?这样我就不用花太多时间在公共回购中寻找它们了。
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)
}