我的机器上正在运行多个Java实例,我想在任何情况下检查Hadoop文件是否已在写入(fs.create(file) or fs.append(file)
)模式下打开。
我在Hadoop文件的FileStatus
中尝试过,找不到任何内容。
有没有办法检查Hadoop文件是否已经打开进行写入了?
一种方法是尝试再次创建/追加文件并捕获异常,但我有数千个文件,并且不想尝试每个文件。此外,如果create / append成功,那么我必须关闭该文件,lastModifiedTime也将被更改。我不想修改Hadoop文件的FileStatus。
答案 0 :(得分:1)
DistributedFileSystem
提供方法isFileClosed(path)
来检查文件是否已打开以进行写入。
try {
DistributedFileSystem dfs = new DistributedFileSystem();
Path path = new Path("/path/to/hadoop/file");
FileSystem fs = path.getFileSystem(conf);
dfs.initialize(fs.getUri(),conf);
if (dfs.exists(path) && !dfs.isFileClosed(path)) {
System.out.println("File " + path +" already opened in write mode");
}
} catch (IOException e) {
e.printStackTrace();
}