Spark ClassNotFoundException $$anonfun$2
1. 软件环境:
软件 | 版本 |
---|---|
Spark | 原生1.6.0 |
Hadoop | 原生2.6.5 |
2. 应用场景&问题描述
运行任务的过程中,指定主类,比如a.b.c.Test, 那么主类是可以被调用的。比如已经运行到a.b.c.Test中的代码,但是接着会报诸如:ClassNotFound : a.b.c.Test$$anonfun$1这样的异常,如下所示:
而通过把a.b.c.Test所在的jar包解压,可以看到其中是有诸如a.b.c.Test$$anonfun$1.class 这样的文件的。通过反编译软件可以看到这个类是a.b.c.Test中的一个函数,这样就很奇诡了。主类Test找得到,但是和其同一个文件的函数的类反而找不到。
3. 解决办法
由于是报类找不到,而且定位是在Executor执行的时候,所以,尝试把jar包加入executor的Classpath中,在代码中添加:
sparkConf.set("spark.executor.extraClassPath","path/to/a.b.c.Test/.jar");
而且,其实已经设置了spark.jars:
sparkConf.set("spark.jars","hdfs://path/to/a.b.c.Test/.jar")