Namenode格式不释放datanode磁盘空间

时间:2013-11-22 09:29:56

标签: hadoop hdfs

关闭集群./stop-all.sh,然后调用hadoop namenode -format后,我看到datanode具有相同的磁盘空间,即空间尚未释放。

为什么?

3 个答案:

答案 0 :(得分:3)

您可以在格式化NameNode

之前手动删除DataNode上的数据

<强> RMR

Usage: hadoop fs -rmr URI [URI …]

删除的递归版本。 例如:

hadoop fs -rmr /user/hadoop/dir
hadoop fs -rmr hdfs://nn.example.com/user/hadoop/dir

退出代码:

成功时返回0,错误时返回-1。


<强>替代地

只要名称节点是,就应该重新格式化数据节点。我在这里看到两种方法:

  1. 为了重新格式化集群,我们称之为“start-dfs -format”或制作一个特殊的脚本“format-dfs”。这将一起格式化集群组件。问题是它是否应该在格式化后启动集群?
  2. 仅格式化名称节点。当数据节点连接到名称节点时,它会告诉它们 如果它看到命名空间为空且其cTime = 0,则格式化它们的存储目录。 这种方法的缺点是,如果数据节点被错误地连接到空名称节点,我们可以从另一个集群中丢失数据节点的块。
  3. https://issues.apache.org/jira/browse/HDFS-107

答案 1 :(得分:3)

在格式化namenode时,空格不会被清除。人们必须手动完成。

要做到这一点,

首先按正确的顺序调用./stop-all.sh./stop-mapred.sh./stop-dfs.sh来停止群集。

然后删除datanode的数据目录,即dfs.data.dirhdfs-site.xmlhadoop.tmp.dir / dfs / data

指定的目录

在执行格式之前执行-rmr(在此问题的其他一个答案中指定)的选项实际上是最好的方法,除非你像我一样在不知不觉中格式化了namenode然后才意识到datanode空间没有得到清理;)

答案 2 :(得分:2)

格式化Namenode不会格式化Datanode。

它只会格式化namenode的内容。即,你的名字节点将不再知道 你的数据在哪里。 namenode -format还会为namenode

分配一个新的命名空间ID

您必须更改datanode中的namespaceID才能使datanode正常工作。 这将是dfs / data / current / VERSION

现在有一个JIRA打开同样建议格式化Datanode以及格式化Namenode时。 HDFS-107