【发布时间】:2012-07-12 19:28:50
【问题描述】:
我正在使用 Hadoop FileStatus API 来确定文件夹是否为空,以便删除目录。
为了确定我在 s3n 上是否有一个空目录,我要做的是检查 FileStatus[] 长度,如果它等于零,那么我请求 Hadoop 文件系统通过 fs.delete(path, false )。这里的 False 表示非递归删除请求。
对于 FTP 和 HDFS,文件以及包含这些文件的空目录将按预期删除。但是对于 S3n,空目录仍然存在。我不确定为什么会这样。
我有使用内存 S3 文件系统的本地单元/集成测试,这里的删除按预期工作。但是,当针对真正的 S3n 文件系统运行代码时,它会失败(空目录没有被删除,但文件被删除)。
任何建议或指示将不胜感激。 谢谢。
【问题讨论】:
-
几个问题可能会帮助其他试图帮助您的人:您是否收到任何异常或错误消息?您是否启用了版本控制?
-
不,没有例外,没有消息。版本控制是什么意思?
-
我的意思是:“您的 S3 存储桶是否启用了版本控制?”
-
没有,据我所知没有。但是我发现如果目录包含文件,递归删除确实有效。由于文件删除而变为空的目录按预期删除。但是,如果我尝试从一开始就删除空目录,那么目录仍然存在。
-
嗯,S3 是一个“平面”文件系统,没有文件夹的概念。长度可能为零,仅仅是因为没有具有该名称的文件。您所说的“目录”实际上只是 S3 中的文件前缀。看看this answer,它可能有助于澄清。