我正在运行使用hadoop 2.2.0在Amazon Web Services Red Hat 6.4上运行map-reduce作业。我使用的Jar文件是建立在我的本地Windows 7计算机上的。地图减少作业运行在我的Windows 7计算机上的本地安装的Hadoop的罚款,但是当我试图在亚马逊比如我碰到下面的错误运行:运行Hadoop Map减少作业,错误:不支持major.minor版本51.0
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)
我做了一些研究,它好像当你运行一个Jar文件时产生了这个错误,这个Jar文件是在一个运行Java旧版本的系统上的较新版本的Java中构建的。然而,当我在我的Windows 7系统上运行 'Java的版本'(其中的JAR文件是使用Eclipse开普勒建)它 给了我下面的:
Java版本 “1.8.0” 的Java(TM)SE运行时环境(build 1.8.0-b132) Java HotSpot™64位服务器虚拟机(内部版本25.0-b70,混合模式)
当我在Amazon Web Services Red Hat 6.4实例上运行它时, :
java版本“1.8.0” Java™SE运行时环境(build 1.8.0-b132) Java HotSpot™64位服务器VM(版本25.0-b70,mix编辑模式)
这两个系统都使用完全相同的Java版本,所以我不确定java版本如何不匹配可能是问题。在Eclipse中,当我转到Window> Java> Complier时,我可以看到“编译器符合级别”为1.7。但是,带有Java 1.8的Hadoop应该能够运行构建在Java旧版本上的Jar文件(它使用Java 1.8在Windows 7机器上运行)。
我似乎在这里找不到任何问题。任何帮助都感激不尽!
您的Eclipse项目是否使用1.8 JRE系统库? – climbage
'bin/hadoop'是一个脚本文件。在该文件的末尾,您可以回显'$ JAVA'变量以查看您正在运行的JVM的哪个版本。它可能是'/ etc/alternatives/java',它会指向一些OS标准安装。 – kdgregory
谢谢,这解决了我的问题。即使我安装了java 1.8,bin/hadoop脚本文件也试图用java 1.6运行。 –