我有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清楚地显示了大量可用空间。
我不确定为什么会这样。
答案 0 :(得分:15)
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
答案 1 :(得分:11)
我遇到了同样的问题,我的磁盘空间非常低。释放磁盘解决了它。
答案 2 :(得分:2)
jps
。答案 3 :(得分:1)
发生这种情况时我通常会做的是转到 tmp / hadoop-username / dfs / 目录并手动删除数据和名称文件夹(假设您在Linux环境中运行)。
然后通过调用 bin / hadoop namenode -format 来格式化dfs(当询问您是否要格式化时,请确保使用大写 Y 进行回答;如果你没有被问到,然后再次重新运行命令。)
然后您可以通过调用 bin / start-all.sh 再次启动hadoop
答案 4 :(得分:0)
非常简单修复Windows 8.1上的同一问题
我使用的是Windows 8.1操作系统和Hadoop 2.7.2,做了以下事情来解决这个问题。
答案 5 :(得分:0)
我有这个问题,我解决了它,如下:
查找您的datanode和namenode元数据/数据保存在哪里;如果你找不到它,只需在mac上执行此命令即可找到它(位于名为“tmp”的文件夹中)
查找/ usr / local / Cellar / -name“tmp”;
find命令是这样的:find<“directory”> -name<“该目录或文件的任何字符串线索”>
找到该文件后,cd进去。 的/ usr /本地/窖//的hadoop / HDFS / TMP
然后cd到dfs
然后使用-ls命令查看数据和名称目录是否位于那里。
使用remove命令将它们删除:
rm -R数据。和rm -R名称
转到bin文件夹,如果您还没有完成,请结束所有内容:
<强> sbin目录/ end-dfs.sh 强>
退出服务器或localhost。
再次登录服务器:ssh&lt;“服务器名称”&gt;
启动dfs:
<强> sbin目录/ start-dfs.sh 强>
格式化namenode以确定:
bin / hdfs namenode -format
您现在可以使用hdfs命令将数据上传到dfs并运行MapReduce作业。
答案 6 :(得分:0)
就我而言,通过在数据节点上的50010上打开防火墙端口可以解决此问题。
答案 7 :(得分:0)
在我的情况下,hdfs-site.xml 中的 dfs.datanode.du.reserved 太大,名称节点也给出了数据节点的私有 IP 地址,因此无法正确路由。私有ip的解决方案是将docker容器切换到主机网络,并将主机名放在配置文件的主机属性中。
这超越了其他可能性 Stack Question on replication issue