我正在尝试从Google存储中读取文件并将其写入我们的文件系统(HDFS)中的文件。如果我运行它一段时间(比方说7天),有时我得到完整的文件,其中的行与源上的whats匹配,有时我得到部分文件(差异非常大)。我粘贴在接受响应的方法下面并将其写入文件。 任何帮助或建议如何我可以进一步解决这个问题将非常感激。
在调用此方法之前,我会对响应状态代码进行简单检查 -
if(response.getStatusCode() == 200 &&
StringUtils.equals(response.getContentType(), "application/zip")) {
writeHdfsFile(response, path);
}
private void writeHdfsFile(HttpResponse response, String path) throws IOException {
final GZIPInputStream inputStream = new GZIPInputStream(response.getContent());
Path filePath = new Path(path);
final FSDataOutputStream outputStream = fileSystem.create(filePath, true);
final byte[] buffer = new byte[1024];
int length;
try {
while((length = inputStream.read(buffer)) > 0) {
outputStream.write(buffer, 0, length);
}
outputStream.flush();
} finally {
inputStream.close();
outputStream.close();
}
}
答案 0 :(得分:1)
我们解决它的方法是首先下载文件然后解压缩并编写它。基本上,将其分为两个步骤可以解决这个问题。如果其他人遇到同样的问题..