当我启动Hadoop时出现“Error:Could find or load main class”

问题描述:

我想在Windows 7机器上运行Hadoop(2.2.0)(是的,我知道在Linux上运行它会更好,但目前这不是一种选择)。 我遵循指示张贴在http://ebiquity.umbc.edu/Tutorials/Hadoop/14%20-%20start%20up%20the%20cluster.htmlhttp://blog.sqltrainer.com/2012/01/installing-and-configuring-apache.html当我启动Hadoop时出现“Error:Could find or load main class”

Evetyhing一直很好,直到我试图启动Hadoop。我尝试运行的每个操作都会完成:Error: Could not find or load main class ...错误。
例如,运行

./hadoop version 

结束了

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

它肯定看起来像类路径的问题。但是,我不知道如何解决它。我尝试设置不同的环境变量,例如$ HADOOP_COMMON_HOME或$ HADOOP_HOME,但没有运气。

任何想法?

+0

您在运行程序之前是否使用HADOOP_CLASSPATH。 'export HADOOP_CLASSPATH =/path/to/your/hadoop/lib' 尝试使用这一次。 – achyut

+0

是的,已经这样做了,它没有帮助。 – Jakub

+0

我在VM中遇到了与Ubuntu相同的错误。 – vdolez

当您通常收到此错误消息时,无论是使用错误的Java版本还是使用较旧的Java版本编译该程序。

您可以通过打开cmd(命令提示符)并输入java -version来检查您的版本。

+0

我正在运行java 1.7.0_21 – Jakub

添加此行到〜/ .bash_profile为我工作:

export HADOOP_PREFIX=/where_ever_you_install_hadoop/hadoop

仅供参考,我也有同样的回答这个帖子:Could not find or load main class org.apache.hadoop.util.VersionInfo

我也一直在试图让Windows 7的了并使用Hadoop运行。对我来说,这个问题是Hadoop是在Cygwin中通过格式CLASSPATH

CLASSPATH=/cygdrive/c/foo:/cygdrive/c/bar 

然而,Java预计CLASSPATH在Windows格式

CLASSPATH=c:\foo;c:\bar 

看着Hadoop的0.19.1给我看他们是如何处理这一点。 您可以插入下面的语句为bin/hadoop,之前它在最后调用Java语言(重复其他Java的调用sh脚本)

cygwin=false 
case "`uname`" in 
CYGWIN*) cygwin=true;; 
esac 

if $cygwin; then 
    echo Cygwin 
    CLASSPATH=`cygpath -p -w "$CLASSPATH"` 
    HADOOP_HOME=`cygpath -d "$HADOOP_HOME"` 
    HADOOP_LOG_DIR=`cygpath -d "$HADOOP_LOG_DIR"` 
    TOOL_PATH=`cygpath -p -w "$TOOL_PATH"` 
fi 

export CLASSPATH=$CLASSPATH 
echo $CLASSPATH 
exec "$JAVA" $JAVA_HEAP_MAX $HADOOP_OPTS $CLASS "[email protected]" 

我曾面临这个问题我自己。这是为我解决了这个问题。

以下内容添加到〜/ .bashrc文件:

export HADOOP_CLASSPATH=$(cygpath -pw $(hadoop classpath)):$HADOOP_CLASSPATH 

注意:您可以直接在Windows上安装Hadoop2.2 +。你不需要Cygwin。