从 HDFS 中删除文件不会释放磁盘空间
Posted
技术标签:
【中文标题】从 HDFS 中删除文件不会释放磁盘空间【英文标题】:Deleting files from HDFS does not free up disk space 【发布时间】:2014-04-14 10:52:17 【问题描述】:将我们的小型 Cloudera Hadoop 集群升级到 CDH 5 后,删除文件不再释放可用存储空间。即使我们删除的数据多于添加的数据,文件系统也会不断填满。
集群设置
我们在物理专用硬件上运行一个四节点集群,总存储容量约为 110 TB。 4 月 3 日,我们将 CDH 软件从 5.0.0-beta2 版本升级到了 5.0.0-1 版本。
我们以前以大约 700 GB/天的速度将日志数据以纯文本格式放在 hdfs 上。在 4 月 1 日,我们改为将数据导入为 .gz 文件,这将每日摄取率降低到约 130 GB。
由于我们只想将数据保留到一定期限,因此每晚都有删除过时文件的工作。这样做的结果以前在 hdfs 容量监控图表中是清晰可见的,但现在已经看不到了。
由于我们每天导入的数据比我们删除的数据少约 570 GB,因此人们预计使用的容量会下降。但是,自集群软件升级以来,我们报告的 hdfs 使用量一直在不断增长。
问题描述
运行hdfs hadoop fs -du -h /
给出以下输出:
0 /system
1.3 T /tmp
24.3 T /user
考虑到导入文件的大小,这与我们期望看到的一致。使用 3 的复制因子,这应该对应于大约 76.8 TB 的物理磁盘使用量。
当运行hdfs dfsadmin -report
时,结果不同:
Configured Capacity: 125179101388800 (113.85 TB)
Present Capacity: 119134820995005 (108.35 TB)
DFS Remaining: 10020134191104 (9.11 TB)
DFS Used: 109114686803901 (99.24 TB)
DFS Used%: 91.59%
Under replicated blocks: 0
Blocks with corrupt replicas: 0
Missing blocks: 0
在这里,DFS Used 报告为 99.24 TB,这是我们在监控图表中看到的。所有这些数据是从哪里来的?
我们尝试过的
我们首先怀疑垃圾的自动清空功能不起作用,但事实并非如此。只有最近删除的文件在回收站中,一天后它们会自动消失。
我们的问题似乎与执行 hdfs 元数据升级但未最终确定会发生的情况非常相似。我认为在这些版本之间升级时不需要这样做,但仍然“以防万一”执行了这两个步骤。
在本地文件系统的DN存储卷上,`previous/finalized'下有很多数据。我对 hdsf 的实现细节知之甚少,不知道这是否重要,但这可能表明最终确定的某些内容不同步。
我们很快就会用完集群上的磁盘空间,因此非常感谢任何帮助。
【问题讨论】:
【参考方案1】:我在我们的集群上发现了一个类似的问题,这可能源于升级失败。
首先确保在namenode上完成升级
hdfs dfsadmin -finalizeUpgrade
我发现数据节点由于某种原因根本没有最终确定它们的目录。
在您的数据节点上,您应该会看到以下目录布局
/[mountpoint/dfs/dn/current/blockpool/current
和
/[mountpoint/dfs/dn/current/blockpool/previous
如果您尚未最终确定上一个目录包含更新前创建的所有数据。如果您删除任何内容,它不会删除它 - 因此您的存储空间永远不会减少。
其实最简单的解决方案就足够了
重启namenode
观察数据节点的日志,你应该会看到类似这样的东西
INFO org.apache.hadoop.hdfs.server.common.Storage: Finalizing upgrade for storage directory
之后会在后台清除目录并回收存储。
【讨论】:
谢谢!这似乎正是发生的事情。只是重新启动名称节点并没有帮助。我们需要手动删除所有 previous 目录以摆脱它们。 非常有用的答案,有同样的问题(从 CDH4.7 到 CDH5.3)。为了补充 knuth 的评论,hdfs 花了一段时间(6-10 小时)来删除所有数据节点上的 /previous 目录,但我没有手动删除它们。 Pixou,您能否提一下自动删除这些目录的过程;您采用的方法?以上是关于从 HDFS 中删除文件不会释放磁盘空间的主要内容,如果未能解决你的问题,请参考以下文章