我知道这与编译和运行时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
如果有人能指出这里发生了什么,我真的很感激。
答案 0 :(得分:0)
你毫无疑问地四处寻找Java“Major”版本51是1.7,所以你很接近。
对我来说唯一清楚的方法是你可以解决这个问题,就是仔细检查一下Class文件 - org.apache.hadoop.conf.Configuration
。以下是Class file的开始定义。请注意,minor_version
和major_version
分别是第2和第3个字段。这应该告诉你编译的类是什么,因此你需要执行的最小运行时间。
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;