代码之家  ›  专栏  ›  技术社区  ›  user123

HDFS—仅在文件完全复制后读取文件

  •  0
  • user123  · 技术社区  · 6 年前

    我必须在HDFS中的给定位置读取文件并执行进一步的操作。我正在使用文件系统API查看位置:

    FileSystem.listStatus(workingDir)
    

    我的问题是一个不断增长的文件,例如,一个200GB的文件被丢弃在该位置。上面的代码返回文件名/路径,但文件仍然没有完全复制。有没有办法确定文件是否使用Java API完全复制?我读过 this 还有其他一些博客/问题,但没有找到我一直在寻找的内容。

    1 回复  |  直到 6 年前
        1
  •  0
  •   user123    6 年前

    就目前而言,这就是我正在做的事情,它是有效的。长度也可以使用,但在我的测试中不可靠。

    FileSystem fileSystem = FileSystem.newInstance(workingDir.toUri(), fsConfig);
    FileStatus[] fileStatuses = FileSystem.listStatus(workingDir);
      for(FileStatus fileStatus : fileStatuses){
        if(fileStatus.isFile()){
           final Path filePath = fileStatus.getPath();
           long modificationTime = fileStatus.getModificationTime();
           Thread.sleep(4000);
           long modTimeAfterSleep = fileStatus.getModificationTime();
         if(modTimeAfterSleep - modificationTime  == 0){
             System.out.println("File fully copied");
         } else {
           System.out.println("Keep fishing..");
         }
    }