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

时间:2018-04-03 19:24:14

标签: java hadoop hdfs

我要读取HDFS中给定位置的文件并进行进一步操作。我正在使用FileSystem API来查看位置:

FileSystem.listStatus(workingDir)

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

1 个答案:

答案 0 :(得分:0)

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

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..");
     }
}
相关问题