无法找到或加载主类 org.apache.hadoop.hdfs.server.namenode.Namenode

Posted

技术标签:

【中文标题】无法找到或加载主类 org.apache.hadoop.hdfs.server.namenode.Namenode【英文标题】:Could not find or load main class org.apache.hadoop.hdfs.server.namenode.Namenode 【发布时间】:2014-07-13 02:21:51 【问题描述】:

我知道以前有人问过这个问题,但我想不出解决方案。当我尝试运行 hdfs name node -format 时出现以下错误:

I followed the instructions from this website to install on my centos machine. 唯一的区别是我使用 root 安装而不是链接中提到的 hadoopuser。

bashrc

# User specific aliases and functions

export JAVA_HOME=/usr/lib/jvm/jre-1.7.0-openjdk.x86_64/
export HADOOP_INSTALL=/usr/local/hadoop
export HADOOP_MAPRED_HOME=$HADOOP_INSTALL
export HADOOP_COMMON_HOME=$HADOOP_INSTALL
export HADOOP_HDFS_HOME=$HADOOP_INSTALL
export YARN_HOME=$HADOOP_INSTALL
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_INSTALL/lib/native
export PATH=$PATH:$HADOOP_INSTALL/sbin
export PATH=$PATH:$HADOOP_INSTALL/bin

hadoop-env.sh

export JAVA_HOME=/usr/lib/jvm/jre-1.7.0-openjdk.x86_64/

映射

<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>

纱线站点.xml

<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>

核心站点.xml

<property>
    <name>fs.default.name</name>
    <value>hdfs://localhost:9000</value>
</property>

hdfs-site.xml

<property>
    <name>dfs.replication</name>
    <value>1</value>
</property>

<property>
    <name>dfs.name.dir</name>
    <value>file:///home/hadoopspace/hdfs/namenode</value>
</property>

<property>
    <name>dfs.data.dir</name>
    <value>file:///home/hadoopspace/hdfs/datanode</value>
</property>

【问题讨论】:

【参考方案1】:

对于仍有问题的人,您需要导出HADOOP_PREFIX 环境变量。

将以下行添加到您的 ~/.bashrc 文件中:

export HADOOP_PREFIX=/path_to_hadoop_location

# for example:
# export HADOOP_PREFIX=/home/mike/hadoop-2.7.1

然后在您的终端中执行. ~/.bashrc 并重试,这将修复错误。

【讨论】:

还有其他可能的原因。这并没有解决我的问题,也是同样的错误,hadoop-2.6.3。 @KayV 您应该提供更多详细信息,例如:版本、本地安装目录、操作系统等。【参考方案2】:

感谢 dcsesq。

brew 在 Mac OS 10.9.5 上安装了 hadoop 2.6.0(特立独行)

将以下环境变量添加到 .profile ~/.bash_profile

export HADOOP_HOME=/usr/local/Cellar/hadoop/2.6.0
export HADOOP_PREFIX=$HADOOP_HOME/libexec
export HADOOP_MAPRED_HOME=$HADOOP_PREFIX
export HADOOP_COMMON_HOME=$HADOOP_PREFIX
export HADOOP_HDFS_HOME=$HADOOP_PREFIX
export YARN_HOME=$HADOOP_PREFIX

获取 .profile 文件

source ~/.bash_profile

运行名称节点

hdfs namenode -format

热潮开始了,困扰了我将近半天。

【讨论】:

这是一个答案,还是一个评论/回复?如果是后者,我建议将代码部分粘贴到要点中,并使用指向此类要点的链接进行评论。否则,你需要格式化你的代码(在编辑器中点击 烦我一整天!感谢您提供环境变量! 无法解决问题。安装 cdh5 后,我收到错误。安装CDH5到系统后有什么问题吗【参考方案3】:

尝试使用以下命令进行格式化(名称和节点之间没有空格并用hadoop替换hdfs命令)

hadoop namenode -format

【讨论】:

我试过没有空间,得到了同样的错误。我错过了什么吗?【参考方案4】:

看起来当您执行 hadoop 命令时,并非所有类(jar)都包含在您的类路径中。 您的类路径缺少 hadoop-hdfs-&lt;version&gt;.jar 文件。

【讨论】:

【参考方案5】:

我遇到了同样的问题。

重启终端并尝试执行命令。

需要重启终端才能使 .bashrc 文件中设置的路径变量立即生效

【讨论】:

【参考方案6】:

我尝试了上面的建议,但仍然遇到同样的错误。在~/.bashrc 中设置HADOOP_CLASSPATH 对我有用:

export HADOOP_CLASSPATH=$(hadoop classpath):$HADOOP_CLASSPATH

【讨论】:

【参考方案7】:

我也有这个错误。对我来说,问题是在初始解压缩过程中缺少未提取的文件。

对我有用的是进入 .tar.gz 文件的位置并使用以下命令再次解压缩:

tar xvzf <file_name>.tar.gz

请注意,这会覆盖您保存的所有文件,因此如果您对任何文件进行了更改,最好在解压缩之前创建 Hadoop 文件夹的副本。

【讨论】:

【参考方案8】:

添加

导出 HADOOP_PREFIX=/path/to/hadoop/installation/directory

在hadoop安装目录中etc/hadoop/hadoop-env.sh文件的末尾。这允许 jvm 定位类文件。

【讨论】:

【参考方案9】:

使用which 确保您的hdfs 路径正确

which hdfs

【讨论】:

【参考方案10】:

错误是由于在 hadoop 类路径中缺少 hadoop hdfs jar 文件。 在终端中输入“hadoop classpath”并检查 hdfs jar 文件是否存在。如果没有将下面的行粘贴到 .bashrc 中并保存并获取它。

export HADOOP_CLASSPATH=new-classpath:$HADOOP_CLASSPATH

您可以通过将位置添加到现有类路径末尾的 hdfs jar 文件并用您自己的替换部分“new-classpath”来创建新的类路径。

【讨论】:

【参考方案11】:

对于 Windows 7 上的 Hadoop v3.1.2,我不得不

    安装 Cygwin(按照说明)。

    设置以下环境变量,注意那些是正斜杠(/)而不是反斜杠(\):

    HADOOP_HOME=D:/.../hadoop-3.1.2
    
    JAVA_HOME=D:/.../java-1.8.0-openjdk-1.8.0.201-2.b09.redhat.windows.x86_64
    

    重新打开 Cygwin 和 CD 到我的 hadoop 目录 -- 必须重新打开以获取新的环境变量。也可以随意使用 ~/.bashrc 和 export HADOOP_HOME=... 等来执行此操作。

    确保您准确输入以下内容:

    ./bin/hdfs.cmd namenode -format

    它必须是 .cmd 否则它将无法在 Windows 上运行。

之后它就完美运行了。如果您仍然遇到问题,请深入研究 hdfs.cmd 文件并添加一些 echo 调用以打印出它正在运行的内容,尤其是在 java 调用附近以查看它正在执行的确切内容。

【讨论】:

【参考方案12】:

可能是类路径问题。

将以下内容添加到您的 ~/.bashrc

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

【讨论】:

【参考方案13】:

我通过修改.bashrc中的路径解决了这个问题:

export PATH=$HADOOP_HOME/bin:$PATH

【讨论】:

【参考方案14】:

检查HADOOP_PREFIX的值并将其设置为$HADOOP

【讨论】:

以上是关于无法找到或加载主类 org.apache.hadoop.hdfs.server.namenode.Namenode的主要内容,如果未能解决你的问题,请参考以下文章

java无法找到或加载主类是怎么回事?

Maven 错误:无法找到或加载主类

Kotlin Gradle 无法找到或加载主类

无法使用 Jar 文件找到或加载主类

GMavenPlus:Groovy 到 JAR - 无法找到或加载主类。主类存在,清单文件显示有效

Eclipse“错误:无法找到或加载主类”