Spark中的一次ClassNotFoundException排除

前阵子,我把实验室小集群上的spark从2.0.0升级到了2.1.1,当时直接排除掉了一个hdfs-site.xml文件不一致的错误(估计这是2.0.0版本的一个BUG),而且跑了一下测试代码,一切OK。

可是,今天当我又试着跑同样一段简单的代码时,抛出了以下异常:

ERROR server.TransportRequestHandler: Error while invoking RpcHandler#receive() on RPC id 6540510158756886012
java.lang.ClassNotFoundException: org.apache.spark.scheduler.cluster.CoarseGrainedClusterMessages$RetrieveSparkProps$
    at scala.reflect.internal.util.AbstractFileClassLoader.findClass(AbstractFileClassLoader.scala:62)
    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:67)
...

在网上搜了半天,几乎一无所获。有一些关于找不到类的异常的文章,但都不是我遇到的情况。后来,逐渐追踪到Spark的文档,发现Spark2.0.0中存在类“CoarseGrainedClusterMessages.RetrieveSparkProps”(见Spark2.0.0文档),但Spark2.1.1中,该类改名了,变成“CoarseGrainedClusterMessages.RetrieveSparkAppConfig”了!(见Spark2.1.1文档).

这样看来,集群某个地方还是在按照2.0.0版本的spark运转,所以才会找不到类。猛然想到,之前在HDFS上专门建了个目录,将spark下jars目录下的jar包都传了上去,以方便spark on yarn的运行,但那些jar包还未更新,因此造成了版本的不一致产生了问题。于是立马更新HDFS上的这些jar包,spark果然又能正常运转了~

发布了172 篇原创文章 · 获赞 3 · 访问量 25万+

猜你喜欢

转载自blog.csdn.net/sizheng0320/article/details/72567727