hadoop上不支持ClassVersionError,没有明显的版本更改

xxls0lw8  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(376)

我正在我的大学群集上运行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进行编译?我认为我们甚至没有安装不同的版本。

gjmwrych

gjmwrych1#

我认为您的系统上已经安装了不止一个版本的java或以前安装过的某个版本,而另一个版本则随hadoop一起提供(如果有的话)。
您正在用一个编译,用另一个启动。
复制环境变量的内容 PATH 设置为文本,并检查上已安装版本的位置 PATH . 如果是,请移除其中一个并保存 PATH .
您还可以检查maven设置,它应该清楚地显示set JAVA_HOME 您还可以:
删除自动生成
清洁工程
使用maven构建:maven->build

wfauudbj

wfauudbj2#

谢谢大家的帮助。问题的根源是hadoop配置,它覆盖了我的 JAVA_HOME . hadoop在其 hadoop-env.sh 配置文件。我的线路配置不当:

export JAVA_HOME=/usr/jdk64/jdk1.6.0_31

这是我们使用hortonworkshadoop套件的结果,它利用ambari并在初始设置时设置了独立的jdk发行版。升级hortonworks版本并重新配置后,我们的mapreduce作业正常运行。

相关问题