Apache Hadoop API以原子方式创建唯一的目录



我正在寻找创建目录的方法,如果目录已经存在,则抛出错误。目前 Apache Hadoop文件系统类有 mkdirs 方法,可以模拟 mkdir -p 的行为。我正在寻找 API 模拟 mkdir 在 java 中。

if fs.exists(path) throw FileAlreadyExistsException("Directory exists") fs.mkdirs(path)

这可以完成,但容易受到争用条件的影响。我们是否有任何可以原子地做到这一点的 API。

不怕。您可以使用 rename(( 重命名目录,并更好地保证它最终是否存在。

您可以通过Hadoop API在HDFS/POSIX文件系统上原子地创建一个文件;您可以使用它作为在目录树上锁定的提示。但是您需要处理锁架故障的问题。这就是为什么事情倾向于使用 ZK 的原因;它确实提供了有保证的原子/唯一zknode创建。

FWIW,原子性和文件系统操作有点混乱。HDFS确实使mkdirs((原子化,这比Unix要多,尽管这是实现的意外(为了性能而保持锁定(。一旦你开始与对象存储对话,你对原子操作和覆盖的所有先入之见都需要重置,否则你的代码将被无意中破坏。

最新更新