找不到或加载主类org.apache.hadoop.util.VersionInfo。

21
我按照 "http://codesfusion.blogspot.com/2013/10/setup-hadoop-2x-220-on-ubuntu.html" 的教程在 Ubuntu 上安装 Hadoop,但在查看 Hadoop 版本时出现以下错误:

Error: Could not find or load main class org.apache.hadoop.util.VersionInfo

并且当我尝试运行hdfs namenode -format时,出现以下错误:

Error: Could not find or load main class org.apache.hadoop.hdfs.server.namenode.NameNode

使用的 Java 版本为:
java version "1.7.0_25"
OpenJDK Runtime Environment (IcedTea 2.3.10) (7u25-2.3.10-1ubuntu0.12.04.2)
OpenJDK 64-Bit Server VM (build 23.7-b01, mixed mode)

可能是What does "Could not find or load main class" mean?的重复问题。 - Stephen C
我的路径已经设定。我无法弄清楚问题出在哪里。 - usb
他们没有预打包的二进制文件吗?那通常是最好的选择。 - yǝsʞǝla
我这里没有Ubuntu,但是在Fedora上我有这些包:$ yum search hadoop 得到的结果是:hadoop-client.noarch, hadoop-common.noarch, hadoop-hdfs.noarch, hadoop-mapreduce.noarch 还有一堆其他的东西。 - yǝsʞǝla
有一个PPA:sudo add-apt-repository ppa:hadoop-ubuntu/stable sudo apt-get update && sudo apt-get upgrade 从http://askubuntu.com/questions/144433/how-to-install-hadoop安装hadoop。 - yǝsʞǝla
显示剩余4条评论
10个回答

17

这是一个环境变量设置的问题。显然,到目前为止我还没有找到能够工作的。我一直在尝试使用2.6.4版本。以下是我们应该做的:

export HADOOP_HOME=/home/centos/HADOOP/hadoop-2.6.4
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
export HADOOP_CONF_DIR=$HADOOP_HOME
export HADOOP_PREFIX=$HADOOP_HOME
export HADOOP_LIBEXEC_DIR=$HADOOP_HOME/libexec
export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATH
export HADOOP_CONF_DIR=$HADOOP_PREFIX/etc/hadoop
把这些添加到你的 .bashrc 文件中,不要忘记执行。
source ~/.bashrc

我认为你的问题将会像我的一样被解决。


我正在使用版本2.10.1,它对我有用!非常感谢! - no-stale-reads

7

您可能没有正确按照指示操作。以下是一些尝试以帮助我们/您诊断问题的方法:

  • 在您运行 hadoop version 命令的 Shell 中,运行 export 命令,并显示相关环境变量列表。

  • 展示您在 /usr/local/hadoop/etc/hadoop/hadoop-env.sh 文件中所输入的内容。

  • 如果以上两种方式都不能提供线索,那么请找到一个文本编辑器来(临时)修改 hadoop 包装 Shell 脚本。添加 "set -xv" 行用于开头附近。然后运行 hadoop version 并展示其输出结果。


运行导出时,我得到以下内容:declare -x CLASSPATH="/usr/local/hadoop/share/hadoop/common" declare -x HADOOP_COMMON_HOME="/usr/local/hadoop" declare -x HADOOP_HDFS_HOME="/usr/local/hadoop" declare -x HADOOP_INSTALL="/usr/local/hadoop" declare -x HADOOP_MAPRED_HOME="/usr/local/hadoop" declare -x HOME="/home/hduser" declare -x JAVA_HOME="/usr/lib/jvm/jdk/" declare -x PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/hadoop/bin:/usr/local/hadoop/sbin" declare -x YARN_HOME="/usr/local/hadoop" - usb
1
我只是在hadoop-env.sh中添加了"export JAVA_HOME=/usr/lib/jvm/jdk/",其余部分保持不变。 - usb
你需要整个"hadoop-env.sh"文件吗? - usb
@usb - 从你对前两个问题的回答中没有看出任何明显的问题。现在请尝试第三个问题,并检查“/usr/local/hadoop/share/hadoop/common”目录是否包含Hadoop JAR文件。 - Stephen C
1
说句实话,我也遇到了同样的问题,结果发现是一个未正确解压的.tar文件。希望这能帮助任何寻找解决方案的人。 - Lalo Sánchez

3
将以下这行内容添加到~/.bash_profile文件中,对我很有帮助。
export HADOOP_PREFIX=/<where ever you install hadoop>/hadoop

所以只需要:

  1. $ sudo open ~/.bash_profile 然后添加上述行
  2. $ source ~/.bash_profile

希望这可以帮到你 (:


3
我曾经遇到过同样的问题。虽然看起来很简单,但却花费了我2个小时的时间。我尝试了上面所有的方法,但都没有帮助。
我只是退出当前终端并重新登录系统,然后一切就正常了!

1

我遇到了那个错误,通过编辑~/.bashrc文件进行如下修复:

export HADOOP_HOME=/usr/local/hadoop
export PATH=$HADOOP_HOME/bin:$PATH

然后打开终端并输入以下命令。
source ~/.bashrc

然后检查。
hadoop version

@Crt 打开新终端,然后再次检查。 - Elsayed
@Crt 检查 hadoop 文件夹的权限。 - Elsayed

1
我遇到了与hadoop 2.7.2相同的问题。在应用了所示的技巧后,我能够启动hdfs,但后来我发现我使用的tar归档文件缺少一些重要的部分。所以下载2.7.3后,一切都像应该工作的那样。
我的第一个建议是重新下载相同版本或主要版本的tar.gz。
如果您继续阅读...这就是我解决问题的方法... 在全新安装hadoop后,无法找到jars。 我做了这个小技巧:
我找到了jars的位置 我将文件夹的符号链接到$HADOOP_HOME/share/hadoop/common
ln -s $HADOOP_HOME/share/hadoop/kms/tomcat/webapps/kms/WEB-INF/lib $HADOOP_HOME/share/hadoop/common 

对于版本命令,您需要hadoop-common-2.7.2.jar,这帮助我找到jar文件存储的位置。

之后...

$ bin/hadoop version 
Hadoop 2.7.2
Subversion https://git-wip-us.apache.org/repos/asf/hadoop.git -r b165c4fe8a74265c792ce23f546c64604acf0e41
Compiled by jenkins on 2016-01-26T00:08Z
Compiled with protoc 2.5.0
From source with checksum d0fda26633fa762bff87ec759ebe689c
This command was run using /opt/hadoop-2.7.2/share/hadoop/kms/tomcat/webapps/kms/WEB-INF/lib/hadoop-common-2.7.2.jar

当然,现在任何Hadoop/HDFS命令都可以使用。

我又是一个快乐的人了,我知道这不是一个礼貌的解决方案,但至少对我有效。


1

请尝试检查以下内容:

  • JAVA_HOME以及Hadoop配置文件中所有与路径相关的变量
  • 运行:. ~/.bashrc(注意前面的点)以使这些变量在您的环境中可用。似乎该指南没有提到此步骤。

1
很抱歉,你能详细解释一下吗?我已经检查了我的hduser的.bashrc文件,里面包含了教程中提到的所有路径。我是不是漏掉了什么?我还执行了. ~/.bashrc命令。 - usb
我的意思是,在教程中,当他执行$vi .bashrc并设置所有变量后,他实际上没有运行该文件,因此变量不会导出到您当前的会话中。您必须在同一终端中运行它,然后才能像hadoop这样在之后运行其他命令。或者重新登录或重启。我只是猜测,也许还有其他原因导致了这个错误。 - yǝsʞǝla
谢谢你的帮助,但我已经尝试重新登录和重启了。似乎没有用。而且我找不到任何其他帖子有相同的错误,所以我认为这应该是非常微不足道的问题。 - usb
您还可以尝试从此目录运行hadoop命令:/usr/local/hadoop-2.2.0/share/hadoop/common/。如果类路径有问题,它可能会得到修复。 - yǝsʞǝla
请尝试使用“hadoop classpath”。 - yǝsʞǝla
显示剩余6条评论

1
这是在 Windows 10Git Bash (mingw64) 上的操作步骤:
export HADOOP_HOME="/PATH-TO/hadoop-3.3.0"
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
export HADOOP_CLASSPATH=$(cygpath -pw $(hadoop classpath)):$HADOOP_CLASSPATH
hadoop version

slf4j-api-1.6.1.jar复制到hadoop-3.3.0\share\hadoop\common中。

0
我按照上述描述添加了环境变量,但仍然无法正常工作。在我的~/.bashrc文件中设置HADOOP_CLASSPATH如下所示,这对我有用:
export HADOOP_CLASSPATH=$(hadoop classpath):$HADOOP_CLASSPATH

-2

我使用了

export PATH=$HADOOP_HOME/bin:$PATH

不要使用

export PATH=$PATH:$HADOOP_HOME/bin

然后它对我起作用了!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接