当前位置:  开发笔记 > 运维 > 正文

从HDFS删除文件不会释放磁盘空间

如何解决《从HDFS删除文件不会释放磁盘空间》经验,为你挑选了1个好方法。

将我们的小型Cloudera Hadoop集群升级到CDH 5后,删除文件不再释放可用的存储空间.即使我们删除的数据多于我们添加的数据,文件系统也会不断填满.

群集设置

我们在物理专用硬件上运行四节点群集,总存储容量为110 TB.4月3日,我们将CDH软件从5.0.0-beta2版本升级到5.0.0-1版本.

我们以前习惯以纯文本格式将日志数据放在hdfs上,速率约为700 GB /天.在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> Joey..:

我在我们的集群上发现了类似的问题,这可能源于升级失败.

首先确保在namenode上完成升级

hdfs dfsadmin -finalizeUpgrade

我发现由于某种原因,datanode根本没有完成他们的目录.

在您的datanode上,您应该看到以下目录布局

/[mountpoint}/dfs/dn/current/{blockpool}/current

/[mountpoint}/dfs/dn/current/{blockpool}/previous

如果尚未最终确定,则上一个目录包含更新前创建的所有数据.如果你删除任何东西它将不会删除它 - 因此你的存储永远不会减少.

实际上,最简单的解决方案就足够了

重新启动namenode

观察datanode的日志,你应该看到这样的东西

INFO org.apache.hadoop.hdfs.server.common.Storage: Finalizing upgrade for storage directory

之后,目录将在后台清除,存储器将被回收.

推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有