satya@ubuntu:~/hadoop/bin$ hadoop namenode -format
DEPRECATED:不建议使用此脚本执行hdfs命令。 而是使用hdfs命令。
Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/hadoop/hdfs/server/namenode/NameNode : 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 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Could not find the main class: org.apache.hadoop.hdfs.server.namenode.NameNode. Program will exit.
答案 0 :(得分:3)
通常会出现此错误(Unsupported major.minor version
),因为在编译期间使用较高的JDK,在运行时使用较低的JDK。在这种情况下,51
对应于JDK 7(对于更多版本映射,请访问this link),这表明
无论JVM 1.6运行时加载什么,它都适用于JVM 1.7。尝试使用JDK 1.7并使用JAVA_HOME
中的hadoop-env.sh
环境变量进行设置。
答案 1 :(得分:1)
默认的java版本和你的Hadoop的java版本应该匹配。这样做:
java -version
打开hadoop-env.sh
(可以在hadoop配置文件夹中找到)并搜索JAVA_HOME
。这个java版本和默认的java版本应该匹配。
注意:将您的JAVA_HOME设置为指向jdk文件夹而不是您的java文件夹
答案 2 :(得分:0)
如果你能展示你的Hadoop版本会更好......但对于Hadoop 2,我认为你可以试试新的格式命令
[hdfs]$ $HADOOP_PREFIX/bin/hdfs namenode -format [-clusterid cid] [-force] [-nonInteractive]
所以在你的情况下,输入
satya@ubuntu:~/hadoop/bin$ hdfs namenode -format
(我指的是适用于您情况的Hadoop 2.7.0
。)
答案 3 :(得分:0)
我也遇到了这个问题。当我输入:
$hadoop classpath
我发现hdfs的类路径是错误的。然后我做了
vi ~/.bashrc
export HADOOP_HDFS_HOME=$HADOOP_HOME
它有效,希望它有所帮助。