java - 使用 Java API 绕过垃圾箱从 HDFS 删除文件

标签 java hadoop hdfs bigdata

我正在尝试使用 Java 删除 HDFS 文件。由于我的文件大小大于配置的垃圾箱限制,因此我无法执行删除操作。下面是用于删除文件的代码片段。我知道 HDFS shell 命令中有 SkipTrash 选项可用。请告诉我 Java 中是否有类似的功能可以在删除文件时绕过垃圾箱。

import org.apache.hadoop.fs.*;

hdfs.delete(output, true);

最佳答案

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

我试图弄清楚同样的事情,但在文档或其他任何地方找到答案并不容易。基本上,如果您使用您提供的代码(为了清楚起见,我将填写该代码),我相信垃圾会被跳过,文件会简单地从 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 。还有更多展示垃圾箱和删除的使用示例,请查看。

关于java - 使用 Java API 绕过垃圾箱从 HDFS 删除文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51779362/

相关文章:

java - 在 JPanel 周围移动 JLabel

shell - hadoop fs -put 命令

java - 如何在eclipse中关闭hadoop源代码中的推测执行

hadoop - 清除hdfs中的/tmp目录

hadoop - 使用 Sqoop 将大型机数据引入 Hadoop

java - 如何在Hadoop中加载 native 库

java - 为什么 RESTful Web 服务无法正确调用 semaphore.acquire()?

java - 如何从没有空格的字符串中提取某些特殊字符之间的所有单词?

mysql - 将所有表从MySQL导入到Hive。我的命令出了什么问题?

java - 使用 OK/DONE 按钮在 Android 上以编程方式显示键盘