我试图在纱线上运行火花。
我正在运行Spark 1.6.0,纱线还可以(Hadoop 2.7.1(。然后,我用我使用的相同纱线升级到Spark 2.2.1,并且由于此错误,我的应用程序都失败了:
Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/spark/network/util/ByteUnit : Unsupported major.minor version 52.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:803)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:442)
at java.net.URLClassLoader.access$100(URLClassLoader.java:64)
at java.net.URLClassLoader$1.run(URLClassLoader.java:354)
at java.net.URLClassLoader$1.run(URLClassLoader.java:348)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:347)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at org.apache.spark.internal.config.package$.<init>(package.scala:41)
at org.apache.spark.internal.config.package$.<clinit>(package.scala)
at org.apache.spark.deploy.yarn.ApplicationMaster.<init>(ApplicationMaster.scala:73)
at org.apache.spark.deploy.yarn.ApplicationMaster$$anonfun$main$1.apply$mcV$sp(ApplicationMaster.scala:763)
at org.apache.spark.deploy.SparkHadoopUtil$$anon$2.run(SparkHadoopUtil.scala:67)
at org.apache.spark.deploy.SparkHadoopUtil$$anon$2.run(SparkHadoopUtil.scala:66)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1698)
at org.apache.spark.deploy.SparkHadoopUtil.runAsSparkUser(SparkHadoopUtil.scala:66)
at org.apache.spark.deploy.yarn.ApplicationMaster$.main(ApplicationMaster.scala:762)
at org.apache.spark.deploy.yarn.ExecutorLauncher$.main(ApplicationMaster.scala:785)
at org.apache.spark.deploy.yarn.ExecutorLauncher.main(ApplicationMaster.scala)
经过一番研究,我发现这是由于使用JDK版本的版本比用于运行的版本更古老的版本所致。我正在运行Java 7,现在我安装了Java 8和Java -version Show(在Master和Workers中(:
java version "1.8.0_161"
Java(TM) SE Runtime Environment (build 1.8.0_161-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.161-b12, mixed mode)
和javac -version:
javac 1.8.0_161
我希望该错误在升级后停止,但事实并非如此。
此错误与Hadoop_conf_dir的任何conf文件有关吗?也许我在升级Java(任何环境变量或类似的东西(
时做错了什么事任何帮助将不胜感激,谢谢
当您的JDK版本低于Java应用程序中的.class文件时,会抛出UnunupportedClassversionError。
问题是由于Java版本不匹配。如果您查看Wikipedia Java类参考,您可以看到应用程序的新版本需要Java 8:
- J2SE 17 = 61
- J2SE 16 = 60
- J2SE 15 = 59
- J2SE 14 = 58
- J2SE 13 = 57
- J2SE 12 = 56
- J2SE 11 = 55
- J2SE 10 = 54
- J2SE 9 = 53
- J2SE 8 = 52
- J2SE 7 = 51
- J2SE 6.0 = 50
- J2SE 5.0 = 49
- JDK 1.4 = 48
- JDK 1.3 = 47
- JDK 1.2 = 46
- JDK 1.1 = 45
如果您有Java 8并且仍在遇到此错误,则应更改Java_home环境变量的内容。
如果您仍然遇到此错误,则应查看此stackoverflow问题(或者您可以随时从系统中删除所有旧版本的Java ...(。
显然您必须添加spark.executorenv.java_home =/usr/java/in spark-defaults.conf。请注意,您可以在命令行中提供-conf。
请参阅http://spark.apache.org/docs/latest/configuration.html#runtime-environment
很可能,您有一个启动文件( start.bat
, start.sh
,这种东西(,该文件具有通往java安装的路径。它也可以在配置文件中。如果您卸载Java 7会发生什么?如果您遇到了Java可执行文件的错误,则有您的答案。
将JAVA_HOME
设置为/etc/hadoop/conf/hadoop-env.sh
中的JDK1.8 PATH(例如/usr/java/jdk1.8.0_151
(,RESTART RESISTRART MANAGAR和NODE MARAFER服务,然后提交Spark作业。