Spark 1.6.0中的ClassNotFoundException来自jar文件实例化的类的匿名函数

时间:2016-02-25 08:19:57

标签: scala apache-spark classloader

我需要在我的spark应用程序中运行时从jar文件中加载一个类(以后来沙箱)。为此,我使用URLClassLoader。

val loader = new URLClassLoader(Array(new URL(s"file:///$jarFilePath")), Thread.currentThread().getContextClassLoader)
appClass = loader.loadClass("com..myclass")
val app = appClass.newInstance().asInstanceOf[MyClass] 

它可以工作,我可以从工人那里访问我班级的方法,但是当我尝试时 要在加载的类中设置spark Dstream管道,作业将失败 classloader无法找到scala匿名函数。

19:31:29.027 [task-result-getter-3] WARN  org.apache.spark.scheduler.TaskSetManager - Lost task 0.0 in stage 3.0 (TID 3, localhost): java.lang.ClassNotFoundException:com.mycompany.simple.Simple$$anonfun$1
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:348)
    at org.apache.spark.serializer.JavaDeserializationStream$$anon$1.resolveClass(JavaSerializer.scala:68)
...

我认为这应该是可能的,因为它类似于REPL的作用?类似的SO问题已经通过将jar文件添加到类路径中来解决(这也适用于我),但这不符合我的需要,因为我需要在类加载器中隔离类。任何提示将不胜感激。

0 个答案:

没有答案