我正在我的大学群集上运行hadoop作业,该作业失败,出现以下错误:
hadoop jar target/SpamClassifier-1.0-SNAPSHOT-jar-with-dependencies.jar <args>
Exception in thread "main" java.lang.UnsupportedClassVersionError: infolab/social/spam/FeatureApp : 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是用不同于运行时版本的java版本编译的。我尝试在hadoop主机本身上构建(因为我享受对机器允许shell访问的奢侈),但没有效果。
java版本:
$ java -version
java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)
maven版本:
Apache Maven 3.1.1 (0728685237757ffbf44136acec0402957f723d9a; 2013-09-17 09:22:22-0600)
Maven home: /opt/apache-maven-3.1.1
Java version: 1.7.0_45, vendor: Oracle Corporation
Java home: /usr/java/jdk1.7.0_45/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "2.6.32-431.5.1.el6.x86_64", arch: "amd64", family: "unix"
hadoop版本(hortonworks):
$ hadoop version
Hadoop 2.2.0.2.0.6.0-102
Subversion git@github.com:hortonworks/hadoop.git -r 02ad68f19849a0a986dac36b705491f6791f9179
Compiled by jenkins on 2014-01-21T00:56Z
Compiled with protoc 2.5.0
From source with checksum 66f6c486e27479105979740178fbf0
This command was run using /usr/lib/hadoop/hadoop-common-2.2.0.2.0.6.0-102.jar
我正在用maven构建这一切,下面是我的 pom.xml
指定java版本控制的:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
我真的不知所措。是否maven出于某种原因正在使用不同版本的java进行编译?我认为我们甚至没有安装不同的版本。
2条答案
按热度按时间gjmwrych1#
我认为您的系统上已经安装了不止一个版本的java或以前安装过的某个版本,而另一个版本则随hadoop一起提供(如果有的话)。
您正在用一个编译,用另一个启动。
复制环境变量的内容
PATH
设置为文本,并检查上已安装版本的位置PATH
. 如果是,请移除其中一个并保存PATH
.您还可以检查maven设置,它应该清楚地显示set
JAVA_HOME
您还可以:删除自动生成
清洁工程
使用maven构建:maven->build
wfauudbj2#
谢谢大家的帮助。问题的根源是hadoop配置,它覆盖了我的
JAVA_HOME
. hadoop在其hadoop-env.sh
配置文件。我的线路配置不当:这是我们使用hortonworkshadoop套件的结果,它利用ambari并在初始设置时设置了独立的jdk发行版。升级hortonworks版本并重新配置后,我们的mapreduce作业正常运行。