我必须在HDFS中的给定位置读取文件并进行进一步的操作。我正在使用FileSystem API来监视位置:
FileSystem.listStatus(workingDir)
我的问题是文件越来越大,例如200GB的文件被拖放到该位置。上面的代码返回文件名/路径,但文件仍未完全复制。有没有办法找出文件是否使用Java API完全复制?我读过this和其他一些博客/问题,但没有找到我一直在寻找的东西。
最佳答案
现在,这就是我正在做的并且有效。长度也可以使用,但是在我的测试中并不可靠。
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..");
}
}