2017-08-10 111 views
0

多臺Java實例正在我的機器上運行,我想檢查Hadoop文件是否已在任何實例中以寫(fs.create(file) or fs.append(file))模式打開。

我嘗試了Hadoop文件的FileStatus,沒有找到任何東西。

有什麼辦法可以檢查Hadoop文件是否已經打開寫入?有沒有辦法檢查Hadoop文件是否已經打開寫入?

一種方法是嘗試再次創建/附加文件並捕獲異常,但我有數千個文件,並且不想嘗試每個文件。另外,如果create/append是成功的,那麼我必須關閉文件,並且lastModifiedTime也會被更改。我不想修改Hadoop文件的FileStatus。

回答

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(); 
       } 
相關問題