有没有办法检查Hadoop文件是否已经打开进行写入?

时间:2017-08-10 06:25:53

标签: java hadoop hadoop2

我的机器上正在运行多个Java实例,我想在任何情况下检查Hadoop文件是否已在写入(fs.create(file) or fs.append(file))模式下打开。

我在Hadoop文件的FileStatus中尝试过,找不到任何内容。

有没有办法检查Hadoop文件是否已经打开进行写入了?

一种方法是尝试再次创建/追加文件并捕获异常,但我有数千个文件,并且不想尝试每个文件。此外,如果create / append成功,那么我必须关闭该文件,lastModifiedTime也将被更改。我不想修改Hadoop文件的FileStatus。

1 个答案:

答案 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();
                }