我正在大学集群上运行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 master本身上进行构建(因为我享受对机器的宽松的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 [email protected]: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进行编译吗?我认为我们甚至没有安装其他版本。
感谢大家的帮助。问题的根源是hadoop配置,它覆盖了我的JAVA_HOME
。Hadoop在其hadoop-env.sh
配置文件中配置自定义环境。我的生产线配置不当:
export JAVA_HOME=/usr/jdk64/jdk1.6.0_31
这是我们使用Hortonworks hadoop套件的结果,该套件利用了Ambari并在初始设置上设置了独立的jdk发行版。升级我们的hortonworks版本并重新配置之后,我们的mapreduce作业即可正常运行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句