前阵子,我把实验室小集群上的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果然又能正常运转了~
————————————————
版权声明:本文为CSDN博主「sizheng0320」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sizheng0320/article/details/72567727