将二进制数据从HDFS文件写入SequenceFile

时间:2013-03-18 10:26:20

标签: hadoop mapreduce hdfs sequencefile

我在HDFS中有很多文件,想要通过MR作业将它们复制到序列文件中。 seq文件的密钥类型是TEXT(我使用SHA1),值类型是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对象并让它来处理问题吗?

感谢。

1 个答案:

答案 0 :(得分:-1)

您可以使用相当于Linux cat命令的HDFS:

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

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