0

我在 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 对象并让它处理问题吗?

谢谢。

4

1 回答 1

-1

您可以只使用 Linuxcat命令的 HDFS 等效项:

hadoop fs -cat '/path/to/files/*.' > oneBigSequenceFile.csv

它将连接一个序列文件中的所有文件。

于 2013-03-18T11:18:22.113 回答