【发布时间】:2017-06-10 23:47:08
【问题描述】:
我有 spark scala 1.6.1_2.10 项目,其中有 2 个模块在编译时不依赖。第一个模块是启动火花驱动器应用程序。 在第一个模块中,在一个 rdd.map{} 操作中,我尝试使用反射加载一个类 class.forName("second.module.function.MapOperation")
我的 spark-submit 将两个模块的 jar 都作为主要模块,而其他模块在 --jars 选项中。
此代码在我的 intellij 上本地运行良好。 由于集群上的 ClassNotFound second.module.function.MapOperation 而失败 如果我测试同一个类,在使用 ClassNotFound 的功能测试用例中也会失败。
类加载器和在 Spark 作业/操作中使用 Class.forName 有问题吗?
【问题讨论】:
-
可能的原因是集群中缺少 jar。 ...看看我的answer
-
没有其他直接调用(没有反射)的类没有任何问题被调用..
-
你能在map方法
val cl = ClassLoader.getSystemClassLoader cl.asInstanceOf[java.net.URLClassLoader].getURLs.foreach(println)里面这样检查吗?它会告诉你你的jar是否存在 -
你是如何启动工作的/以及纱线集群或纱线客户端的模式......你可以在这里打印你的 spark-submit
标签: scala apache-spark reflection classnotfoundexception