【问题标题】:java.lang.UnsupportedClassVersionError Unsupported major.minor version 51.0 rhdfsjava.lang.UnsupportedClassVersionError 不支持的 major.minor 版本 51.0 rhdfs
【发布时间】:2016-01-10 08:25:20
【问题描述】:

我知道这与编译和运行时 Java 版本之间的差异有关,但是我认为我已经正确设置了所有环境变量,所以我真的不知道这仍然会导致这个问题。

$ java -version
java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)
$ javac -version
java 1.7.0_79
$ echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home
$ hadoop version
Hadoop 2.7.1

在 RStudio 中,我有

> Sys.getenv("JAVA_HOME")
[1] "/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home"
> library(rhdfs)
Loading required package: rJava

HADOOP_CMD=/usr/local/Cellar/hadoop/2.7.1/bin/hadoop

Be sure to run hdfs.init()
Warning message:
package ‘rJava’ was built under R version 3.1.3 
> hdfs.init()
Error in .jnew("org/apache/hadoop/conf/Configuration") : 
  java.lang.UnsupportedClassVersionError: org/apache/hadoop/conf/Configuration : Unsupported major.minor version 51.0

我还将 Hadoop 的 hadoop-env.sh 中的 $JAVA_HOME 设置为 1.7.0

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home

如果有人能指出这里发生了什么,我将不胜感激。

【问题讨论】:

    标签: java hadoop rhadoop


    【解决方案1】:

    毫无疑问,您四处搜索发现 Java“主要”版本 51 是 1.7,所以您已经接近了。

    对我来说,真正弄清楚这一点的唯一明确方法是检查正在审查的 Class 文件 -- org.apache.hadoop.conf.Configuration。下面是Class file 的开始定义。请注意,minor_versionmajor_version 分别是第二个和第三个字段。这应该告诉您该类是在什么情况下编译的,因此您需要执行的最短运行时间。

    struct Class_File_Format {
       u4 magic_number;
    
       u2 minor_version;   
       u2 major_version;
    
       u2 constant_pool_count;   
    
       cp_info constant_pool[constant_pool_count - 1];
    
       u2 access_flags;
    

    【讨论】:

      猜你喜欢
      • 2014-03-17
      • 2012-10-10
      • 2013-02-02
      • 2012-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-29
      相关资源
      最近更新 更多