hdfs datanode不回收本地磁盘空间,如果在关闭一段时间后重新启动

Posted

技术标签:

【中文标题】hdfs datanode不回收本地磁盘空间,如果在关闭一段时间后重新启动【英文标题】:hdfs datanode not reclaiming local disk space, if restarted after being down for a while 【发布时间】:2017-12-18 08:05:03 【问题描述】:

我正在使用 hadoop 2.9.0 作为分布式文件存储系统进行 POC,因此设置了一个多节点集群设置,其中包含 1 个名称节点和 4 个数据节点(包括主节点),复制因子为 2 .

现在,经过一系列复制操作,我决定停止其中一个数据节点(slave2)。然后我在 slave2 仍然关闭时使用hdfs dfs -rm -skipTrash 命令清理了几 GB 的数据。

后来我重新启动了我已经停止的slave2数据节点,它似乎没有清理在停机期间从hdfs中删除的数据块。

我继续添加/删除更多数据以查看它是否可以与主名称节点同步并执行本地清理以回收磁盘空间,但它没有。

以下是每个节点的数据消耗:

slave2:

hduser@slave2:~$ hdfs dfs -du -s -h /
4.5 G  / 
hduser@slave2:~$ du -sh /hadoop-tmp/
7.7G    /hadoop-tmp/ [<-- notice extra 2.2 GB of data present on local disk] 

主人:

hduser@master:~$ du -sh /hadoop-tmp/
4.6G    /hadoop-tmp/ 
hduser@master:~$ hdfs dfs -du -s -h /
4.5 G  / 

slave1:

hduser@slave1:~$ hdfs dfs -du -s -h /
4.5 G  /
hduser@slave1:~$ du -sh /hadoop-tmp/
4.5G    /hadoop-tmp/

slave3:

hduser@slave3:/$ du -sh /hadoop-tmp/
2.8G    /hadoop-tmp/
hduser@slave3:/$ hdfs dfs -du -s -h /
4.5 G  /

我想我的问题是“slave2 datenode 需要多长时间才能与 master namenode 同步,以确认它已经从 HDFS 集群中删除了本地存储的数据块,因此它需要清理它。如果确实会发生超时,那么我们可以控制同步的持续时间吗?

如果这不会发生,那么从关闭并在一段时间后恢复的数据节点中回收磁盘空间的过程是什么?

【问题讨论】:

【参考方案1】:

您可以考虑运行 FSCK 来识别集群上的不一致块,然后在不再打算保留数据时采取必要的措施来删除留下的块。

【讨论】:

我尝试做 FSCK,但它也没有帮助,但是,我确实观察到在一段​​时间内空间确实被释放了(如果不是最多 0 个字节,那么至少最多几个兆)。虽然不确定这是否是预期的行为。

以上是关于hdfs datanode不回收本地磁盘空间,如果在关闭一段时间后重新启动的主要内容,如果未能解决你的问题,请参考以下文章

Hdfs磁盘存储策略和预留空间配置

HDFS系列之DataNode磁盘管理解析及实践!

hdfs datanode通过添加数据盘扩容

HDFS的高可用设计

HDFS 副本存放磁盘选择策略详解

如何对HDFS进行节点内(磁盘间)数据平衡