写入HDFS只能复制到0个节点而不是minReplication(= 1)

我有3个数据节点正在运行,而在运行作业时我得到以下错误,

java.io.IOException:File / user / ashsshar / olhcache / loaderMap9b663bd9只能复制到0个节点而不是minReplication(= 1)。 运行中有3个数据节点,此操作中排除了3个节点。 在org.apache.hadoop.hdfs.server.blockmanagement.BlockManager.chooseTarget(BlockManager.java:1325)

此错误主要发生在我们的DataNode实例空间不足或DataNode未运行时。 我尝试重新启动DataNodes但仍然遇到相同的错误。

我的集群节点上的dfsadmin -reports清楚地显示了大量可用空间。

我不确定为什么会这样。

1.停止所有Hadoop守护进程

 for x in `cd /etc/init.d ; ls hadoop*` ; do sudo service $x stop ; done 

2.从/var/lib/hadoop-hdfs/cache/hdfs/dfs/name删除所有文件

 Eg: devan@Devan-PC:~$ sudo rm -r /var/lib/hadoop-hdfs/cache/ 

3.Format Namenode

 sudo -u hdfs hdfs namenode -format 

4.启动所有Hadoop守护进程

 for x in `cd /etc/init.d ; ls hadoop*` ; do sudo service $x start ; done 

停止所有Hadoop服务

我遇到了同样的问题,我的磁盘空间非常低。 释放磁盘解决了它。

  1. 检查您的DataNode是否正在运行,使用命令: jps
  2. 如果它没有运行等待某个时间并重试。
  3. 如果它正在运行 ,我认为你必须重新格式化你的DataNode。

发生这种情况时我通常会做的是,我转到tmp / hadoop-username / dfs /目录并手动删除数据名称文件夹(假设您在Linux环境中运行)。

然后通过调用bin / hadoop namenode -format来格式化dfs(确保在询问是否要格式化时使用大写Y进行回答;如果没有询问,则再次重新运行该命令)。

然后,您可以通过调用bin / start-all.sh再次启动hadoop

非常简单的修复Windows 8.1上的相同问题
我使用的是Windows 8.1操作系统和Hadoop 2.7.2,做了以下事情来解决这个问题。

  1. 当我启动hdfs namenode -format时,我注意到我的目录中有一个锁。 请参考下图。
    HadoopNameNode
  2. 一旦我删除了如下所示的完整文件夹,我再次执行了hdfs namenode -format。 文件夹位置
    完整文件夹删除
  3. 执行上述两个步骤后,我可以成功将所需文件放入HDFS系统。 我使用start-all.cmd命令启动yarn和namenode。

我有这个问题,我解决了它如下:

  1. 找到您的datanode和namenode元数据/数据保存在哪里; 如果你找不到它,只需在mac上执行此命令即可找到它(位于名为“tmp”的文件夹中)

    find / usr / local / Cellar / -name“tmp”;

    find命令是这样的:find <“directory”> -name <“该目录或文件的任何字符串线索”>

  2. 找到该文件后,cd进去。 在/ usr /本地/酒窖//的Hadoop / HDFS / tmp目录

    然后cd到dfs

    然后使用-ls命令查看数据和名称目录位于那里。

  3. 使用remove命令删除它们:

    rm -R数据。 和rm -R名称

  4. 如果您还没有完成,请转到bin文件夹并结束所有内容:

    sbin目录/ end-dfs.sh

  5. 退出服务器或localhost。

  6. 再次登录服务器:ssh <“server name”>

  7. 启动dfs:

    sbin目录/ start-dfs.sh

  8. 格式化namenode以确保:

    bin / hdfs namenode -format

  9. 您现在可以使用hdfs命令将数据上传到dfs并运行MapReduce作业。