在使用Spark Submit时出现了不支持的类版本错误

3

我正在尝试在一台安装了 Java 版本为 jdk 1.7 的远程机器上运行使用 Maven 和 JDK1.8 构建的 Spark 应用程序。使用 spark-submit 命令:

./bin/spark-submit --class myapp.Main --master local[*] /home/mbala/myJars/CDCJar/myapp-0.0.1-SNAPSHOT.jar /home/mbala/myJars/CDCJar/previous.csv /home/mbala/myJars/CDCJar/source.csv /home/mbala/fer

出现以下异常:

Exception in thread "main" java.lang.UnsupportedClassVersionError: myapp/Main : Unsupported major.minor version 52.0 at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:800) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) at java.net.URLClassLoader.defineClass(URLClassLoader.java:449) at java.net.URLClassLoader.access$100(URLClassLoader.java:71) at java.net.URLClassLoader$1.run(URLClassLoader.java:361) at java.net.URLClassLoader$1.run(URLClassLoader.java:355) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:354) at java.lang.ClassLoader.loadClass(ClassLoader.java:425) at java.lang.ClassLoader.loadClass(ClassLoader.java:358) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:274) at org.apache.spark.util.Utils$.classForName(Utils.scala:225) at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:686) at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:185) at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:210) at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:124) at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)

该错误表示您正在尝试运行一个使用Java版本52的应用程序,而您当前的Java版本较低。请升级您的Java版本以解决此问题。

1
原因就是您在描述中写的那样,代码是在Java 8编译的,在Java 7上运行。 - janek
1个回答

4
如果使用 Java Development Kit 8 构建了一个 Java 程序,则需要至少 Java Runtime 8 才能运行它,否则将出现异常。升级远程机器上的 Java 版本或改用 JDK 7 构建以避免此类问题。

问题在于我设置了JAVA_HOME,但每当我注销然后重新连接时,我发现它没有再次设置。 - hammad
这可能有助于解决这个问题:http://unix.stackexchange.com/questions/42032/how-to-set-environment-variable-java-home-that-will-be-saved-on-exit - Nicolas Filotto
我尝试过这个,但每次连接时都必须重新做一遍。 - hammad
你做的方式有问题,因为一旦完成,它会在连接时自动设置。目标操作系统是什么? - Nicolas Filotto
你可以使用JDK 8编译你的代码,并在JDK 7上运行它。你必须设置目标类文件版本,例如当使用Maven时,设置属性<maven.compiler.target>1.7</maven.compiler.target> - P.J.Meisch
可能是重复问题:https://dev59.com/Fmkv5IYBdhLWcg3wvDXq?rq=1 - Deepesh Rehi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接