使用javaapi绕过垃圾从hdfs中删除文件

i2byvkas  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(461)

我正在尝试用java删除hdfs文件。由于我的文件大小大于垃圾箱限制配置,我无法执行删除操作。下面是用于删除文件的代码段。我知道hdfsshell命令中有skiptrash选项。请让我知道,如果任何类似的是在java中,将绕过垃圾删除文件。

import org.apache.hadoop.fs.*;

hdfs.delete(output, true);
cvxl0en2

cvxl0en21#

我知道有点晚了,但可能会帮助别人。
我试图弄清楚这一点,但在文档或其他任何地方都不容易找到答案。基本上,如果您使用您提供的代码(为了清楚起见,我将填写这些代码),我相信垃圾将被跳过,文件将从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. 有更多的例子显示了垃圾和删除的使用,所以看看吧。

相关问题