gpt4 book ai didi

java - 如何非常快速地删除 hdfs 中包含大量文件的文件夹

转载 作者:可可西里 更新时间:2023-11-01 14:48:17 24 4
gpt4 key购买 nike

我需要删除 hdfs 上的一个文件夹,其中包含大量文件,比如 1,000,000 个。这不是一次性任务,这是我每天的要求。目前我正在使用下面的代码:

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

但是上面的过程花费了更多的时间,大约需要 3 个小时。有什么方法可以非常快速地删除整个文件夹。

最佳答案

简单的回答:你不能

让我解释一下为什么。删除文件夹时,您将删除对其中包含的所有文件(递归)的所有引用。有关这些文件( block 位置)的元数据保留在名称节点中。

数据节点存储数据 block ,但基本上不知道它对应的实际文件。尽管您可以从技术上删除名称节点中对文件夹的所有引用(这会使文件夹显示为已删除),但数据仍会保留在数据节点上,数据节点无法知道数据“已死”。

因此,当您删除一个文件夹时,您必须首先回收所有文件的所有数据 block 中的所有内存,这些数据 block 分布在整个集群中。这可能会花费大量时间,但基本上是不可避免的。

您可以简单地在后台线程中处理删除。虽然这对冗长的过程没有帮助,但这至少会向应用程序隐藏此过程。

关于java - 如何非常快速地删除 hdfs 中包含大量文件的文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45056314/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com