【问题标题】:Running Hadoop Map Reduce Job, Error: Unsupported major.minor version 51.0运行 Hadoop Map Reduce 作业,错误:不支持的 major.minor 版本 51.0
【发布时间】:2014-03-24 20:44:21
【问题描述】:

我正在使用 hadoop 2.2.0 在 Amazon Web Services Red Hat 6.4 上运行 map-reduce 作业。我正在使用的 Jar 文件是在我的本地 Windows 7 计算机上构建的。 map reduce 作业在我的 Windows 7 机器上本地安装的 Hadoop 上运行良好,但是当我尝试在 Amazon 实例上运行它时,我收到以下错误:

Exception in thread "main" java.lang.UnsupportedClassVersionError: mapReduce/Tes
tXMLConfig : Unsupported major.minor version 51.0
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
        at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:247)
        at org.apache.hadoop.util.RunJar.main(RunJar.java:205)

我进行了一些研究,似乎当您在运行旧版本 Java 的系统上运行在新版本 Java 中构建的 Jar 文件时会生成此错误。但是,当我在我的 Windows 7 系统(其中 Jar 文件是使用 Eclipse Kepler 构建的)上运行“java -version”时,它 给了我以下内容:

java版本“1.8.0” Java(TM) SE 运行时环境 (build 1.8.0-b132) Java HotSpot(TM) 64 位服务器 VM(内部版本 25.0-b70,混合模式)

当我在我的 Amazon Web Services Red Hat 6.4 实例上运行它时,它还会提供:

java版本“1.8.0” Java(TM) SE 运行时环境 (build 1.8.0-b132) Java HotSpot(TM) 64 位服务器 VM(内部版本 25.0-b70,混合模式)

两个系统都使用完全相同的 Java 版本,所以我不确定 Java 版本不匹配的问题。在 Eclipse 中,当我转到 Window > Java > Complier 时,我可以看到“Compiler Compliance Level”为 1.7。但是带有 Java 1.8 的 Hadoop 应该能够运行基于旧版本 Java 构建的 Jar 文件(它在使用 java 1.8 的 Windows 7 机器上运行)。

我似乎在这里找不到任何问题。任何帮助将不胜感激!

【问题讨论】:

  • 您的 Eclipse 项目是否使用 1.8 JRE 系统库?
  • bin/hadoop 是一个脚本文件。在该文件的末尾,您可以回显$JAVA 变量以准确查看您正在运行的JVM 版本。可能是/etc/alternatives/java,它将指向一些操作系统标准安装。
  • 谢谢,这解决了我的问题。即使我安装了 java 1.8,bin/hadoop 脚本文件仍试图与 java 1.6 一起运行。
  • @Hi_Im_Tim。你在哪里写的 echo 语句?

标签: java eclipse hadoop amazon-web-services


【解决方案1】:

尝试将 JAVA_HOME 环境变量设置为 JDK 的主目录。我以前遇到过这个错误,我的 java -version 是正确的,但没有设置 JAVA_HOME。将 JAVA_HOME 设置为我的 JDK Contents Home 后,我不再遇到此问题。

注意 - 这发生在我的 Macbook 上,并且使用了不同的软件。

【讨论】:

  • 我的 JAVA_HOME 没有设置任何东西,所以我将它设置为 jdk1.8.0/bin 目录的位置,但我仍然收到错误。
  • @Hi_Im_Tim - JAVA_HOME 应设置为 Java 安装的基本目录,而不是 bin 目录。
  • @Hi_Im_Tim 正如 kdgregory 所说,它不应该设置为 bin。比如我当前的JAVA_HOME是/Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-17
  • 1970-01-01
  • 1970-01-01
  • 2016-01-10
  • 2015-05-29
相关资源
最近更新 更多