我在 HDFS 中有很多文件,想通过 MR 作业将它们复制到序列文件中。seq文件的key类型是TEXT(我用的是SHA1),value类型是BytesWritable(文件内容)。我发现一些示例代码将所有文件内容读取到一个字节数组中,比如缓冲区,然后将缓冲区设置为 ByteWritable 对象。前任:
byte[] buffer = new byte[(int)file.length()];
FileInputStream fis = new FileInputStream(fileEntry);
int length = fis.read(buffer);
fis.close();
key.set(sha1);
value.set(buffer, 0, buffer.length);
writer.append(key, value);
我的问题是:如果我的输入文件很大,缓冲区大小会超出内存限制。我可以在每次迭代中写入少量数据的循环附加到 ByteWritable 对象吗?或者我可以将输入流分配给 BytesWritable 对象并让它处理问题吗?
谢谢。