如何在hdfs上快速删除包含大量文件的文件夹

时间:2017-07-12 11:22:56

标签: java hadoop hdfs

我要求删除包含大量文件(例如1,000,000)的hdfs文件夹。这不是一次性任务,这是我的日常要求。目前我正在使用以下代码:

    Configuration c=new Configuration();
FileSystem fs = FileSystem.get(c);
fs.delete(folder,true);

但上述时间大约需要3个小时。有没有办法可以非常快速地删除整个文件夹。

1 个答案:

答案 0 :(得分:2)

简单回答:你不能

让我解释一下原因。删除文件夹时,将删除对其中包含的所有文件(递归)的所有引用。有关这些文件(块位置)的元数据保留在namenode中。

数据节点存储数据块,但基本上不知道它对应的实际文件。虽然从技术上可以从namenode中删除对文件夹的所有引用(这会使文件夹显示为已删除),但数据仍然会保留在数据节点上,这样就无法知道数据是否已经消失了## 34。

因此,当您删除文件夹时,必须首先从所有数据块中回收所有内存,这些数据块分布在整个群集中以供所有文件使用。这可能需要很长时间,但基本上是不可避免的。

您只需在后台线程中处理删除操作即可。虽然这对冗长的过程没有帮助,但至少可以将这个过程隐藏起来。

相关问题