我有一个独立的节点集群中运行DataStax企业4.8星火1.4.1,而我提出在集群模式下我的应用程序是这样的:驱动程序类路径 - ClassNotFoundException的
dse spark-submit \
--class MyApp \
--master spark://MY-IP:6066 \
--deploy-mode cluster \
--packages LIST-OF-MY-DEPENDECIES \
MyApp.jar
这似乎为它工作应该。它将所有传递依赖的JAR下载到本地Maven并启动我的应用程序,但是这些JAR不在类路径中。
object MyApp {
def main(args: Array[String]): Unit = {
// This fails with: ClassNotFoundException
getClass.getClassLoader.loadClass("akka.cluster.Cluster$")
}
}
我发现了类加载器(org.apache.spark.util.MutableURLClassLoader
)及其父母包括由位于/usr/share/dse
下DataStax只提供标准静态JAR文件,但没有我的依赖。
另一个发现是,名为spark.jars
的Spark配置属性(以及系统属性)包含这些JAR的列表。这些应该如何到达classpath?
注意:我使用了第二种方法,所以让我知道是否有问题,我可以仔细看看。 – marios
Uber jar由于资源文件冲突而导致问题 - 覆盖reference.conf并且变得相当大(100 + MB)。 SparkContext.addjar不能解决我的问题。主要方法的第一行需要类路径上的JAR。但你的建议只是一种解决方法。我想知道为什么我的方法不起作用。谢谢 –