java - 使用 Java API 绕过垃圾箱从 HDFS 中删除文件
问题描述
我正在尝试使用 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 。有更多的例子展示了垃圾箱和删除的用法,所以看看吧。
推荐阅读
- html - 来自单个 HTML 复选框的两个值
- arrays - 将 HealthKit 数据放入数组中
- sql - 在最近的日期加入 [Amazon Redshift]
- c - 手册页在线程安全上冲突
- php - 从数据透视表 LARAVEL 中分离单个记录
- ffmpeg - 将原始音频512浮点值输入FFMPEG?
- visual-studio-code - 如何将多个转换应用于片段变量
- snowflake-cloud-data-platform - 在 Snowflake 过程中使用 query_id 捕获并运行 result_scan
- r - 匹配同一数据帧上另一列范围内的列中的值并返回相应的行
- java - 迁移到 Java 11 时如何替换 JAX-WS