使用Java API从HDFS中绕过垃圾桶删除文件

时间:2018-08-10 05:12:10

标签: hadoop hdfs bigdata

我正在尝试使用Java删除HDFS文件。由于我的文件大小大于已配置的垃圾箱限制,因此我无法执行删除操作。以下是用于文件删除的代码段。我知道HDFS Shell命令中有skipTrash选项。请让我知道Java中是否有类似的东西,在删除文件时会通过Trash。

导入org.apache.hadoop.fs。*;

hdfs.delete(output,true);

1 个答案:

答案 0 :(得分:1)

我知道这有点晚了,但可能会对其他人有所帮助。

我试图弄清楚这件事,在文档或其他任何地方都不容易找到答案。基本上,如果您使用提供的代码(为清楚起见,将填写该代码),我相信会跳过垃圾桶,而只是从HDFS中删除文件(在此特定示例中是递归的)。

import org.apache.hadoop.fs.FileSystem;

FileSystem hdfs = FileSystem.get(config);

boolean recursive = true;
hdfs.delete(pathToFiles, recursive);

如果要将文件移到垃圾箱,似乎必须在删除文件之前这样做。为此,您将需要执行以下操作:

import org.apache.hadoop.fs.Trash;
import org.apache.hadoop.fs.FileSystem;


FileSystem hdfs = FileSystem.get(config);
boolean skipTrash = false;

if (!skipTrash) {
    Trash trashTmp = new Trash(hdfs, configuration);
    trashTmp.moveToTrash(pathToFiles);
}
hdfs.delete(pathToFiles, recursive);

记住要处理此操作可能引发的IOException。

我在JavaSED上找到了这个示例(来源,示例,讨论):http://www.javased.com/index.php?api=org.apache.hadoop.fs.Trash。还有更多示例说明“废纸rash”和“删除”的用法,请查看。