org / apache / spark / network / util / ByteUnit:不支持的major.minor版本52.0

时间:2018-02-07 12:06:55

标签: java apache-spark yarn

我正在尝试在纱线上运行Spark。

我正在运行Spark 1.6.0,这对Yarn(hadoop 2.7.1)没问题。然后,我使用与我使用的相同的Yarn升级到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显示(在master和worker中):

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(任何环境变量或类似的东西)时做错了什么

感谢任何帮助,谢谢

3 个答案:

答案 0 :(得分:3)

当您的JDK版本低于Java应用程序中的.class文件时,将抛出UnsupportedClassVersionError。

问题是由于Java版本不匹配。如果查看Wikipedia Java Class Reference,您可以看到新版本的应用程序需要Java 8:

  • 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 question(或者您可以随时从系统中删除所有旧版本的Java ...)。

显然你必须在spark-defaults.conf中添加spark.executorEnv.JAVA_HOME = / usr / java /。请注意,您可以使用--conf。

在命令行中提供它

请参阅http://spark.apache.org/docs/latest/configuration.html#runtime-environment

答案 1 :(得分:0)

最有可能的是,你有一个启动文件(start.batstart.sh,那种东西),它有Java编码的路径。它也可以在配置文件中。如果卸载Java 7会发生什么?如果您收到找不到Java可执行文件的错误,那么就是您的答案。

答案 2 :(得分:0)

JAVA_HOME中将/usr/java/jdk1.8.0_151设置为JDK1.8路径(例如/etc/hadoop/conf/hadoop-env.sh),重新启动资源管理器和节点管理器服务,然后提交Spark作业。