从HDFS下载大文件

时间:2015-08-05 06:09:04

标签: java file-io hdfs

我从HDFS客户端获得了一个大文件(大约2GB)的DataInputStream,我需要将它作为文件存储在我的主机上。

我正在考虑使用apache常见的IOUtils并做这样的事情......

File temp = getTempFile(localPath);
DataInputStream dis = HDFSClient.open(filepath); // around 2GB file (zipped)
in = new BufferedInputStream(dis);
out = new FileOutputStream(temp);
IOUtils.copy(in, out);

我一直在寻找能比这种方法更好的其他解决方案。主要关心的是在输入和IOUtils.copy中使用缓冲......

1 个答案:

答案 0 :(得分:0)

对于大于2GB的文件,建议使用IOUtils.copyLarge()(如果我们谈论相同的IOUtils: org.apache.commons.io.IOUtils

IOUtils中的副本使用4Kb的默认缓冲区大小(尽管您可以指定另一个缓冲区大小作为参数)。

copy()copyLarge()之间的差异是返回结果。

对于copy(),如果流大于2GB,您将获得副本但结果为-1。

对于copyLarge(),结果恰好是您复制的字节数。

在此处的文档中查看更多内容: http://commons.apache.org/proper/commons-io/apidocs/org/apache/commons/io/IOUtils.html#copyLarge(java.io.InputStream,%20java.io.OutputStream)