Java ApacheHadoopAPI以原子方式创建唯一目录

Java ApacheHadoopAPI以原子方式创建唯一目录,java,hadoop,hdfs,Java,Hadoop,Hdfs,我正在搜索创建目录并在目录已经存在时抛出错误的方法。目前,ApacheHadoop的Filesystem类拥有mkdirs方法,该方法模拟mkdir-p的行为。我正在java中搜索API simulatemkdir 如果fs.存在(路径) 抛出FileReadyExistsException(“目录存在”) fs.mkdirs(路径) 这是可以做到的,但易受比赛条件的影响。我们是否有任何API可以原子化地实现这一点。恐怕没有。您可以使用rename()重命名目录,这样可以更好地保证它在最后是否存

我正在搜索创建目录并在目录已经存在时抛出错误的方法。目前,ApacheHadoop的Filesystem类拥有mkdirs方法,该方法模拟mkdir-p的行为。我正在java中搜索API simulatemkdir

如果fs.存在(路径)
抛出FileReadyExistsException(“目录存在”)
fs.mkdirs(路径)


这是可以做到的,但易受比赛条件的影响。我们是否有任何API可以原子化地实现这一点。

恐怕没有。您可以使用rename()重命名目录,这样可以更好地保证它在最后是否存在

您可以通过hadoop API在HDFS/posix文件系统上以原子方式创建文件;您可以使用它作为在目录树上获取锁的提示。但是您需要处理锁座故障的问题。这就是为什么事情倾向于使用ZK来实现这一点;它确实提供了有保证的原子/唯一节点创建

FWIW、原子性和文件系统操作有点混乱。HDFS确实使mkdirs()原子化,这比unix的原子化程度更高,尽管这是实现的一个意外(保持性能锁定)。一旦您开始与对象存储交谈,您对原子操作和覆盖的所有先入之见都需要重置,否则您的代码将被无意中破坏