我有2个作业(不同的JVM实例)试图创建相同的文件。
在某些极端情况下,这2个作业会同时检查文件的存在并尝试完全同时创建它。
我的代码:
val hdfs: FileSystem = FileSystem.get(sparkContext.hadoopConfiguration)
val path: Path = new Path(filePath)
if(!hdfs.exists(path)) {
hdfs.create(path, false).close()
// next some work which might be done only by the job who really created file.
}
因此,这两个作业将同时发现文件不存在,并尝试创建该文件。为函数false
使用值FSDataOutputStream create(Path f, boolean overwrite)
是不够的,因为它不会警告是否创建了文件:没有抛出异常,如果创建了文件则没有返回的布尔值标记。
所以您能建议我如何摆脱这个问题吗?
谢谢。