Hadoop 将HDFS文件中的二进制数据写入SequenceFile

Hadoop 将HDFS文件中的二进制数据写入SequenceFile,hadoop,mapreduce,hdfs,sequencefile,Hadoop,Mapreduce,Hdfs,Sequencefile,我在HDFS中有很多文件,希望通过MR job将它们复制到序列文件中。 seq文件的键类型是TEXT(我使用SHA1),值类型是BytesWritable(文件内容)。 我发现一些示例代码将所有文件内容读入一个字节数组,比如说buffer,然后将buffer设置为ByteWritable对象。例: byte[] buffer = new byte[(int)file.length()]; FileInputStream fis = new FileInputStream(fileEntry);

我在HDFS中有很多文件,希望通过MR job将它们复制到序列文件中。 seq文件的键类型是TEXT(我使用SHA1),值类型是BytesWritable(文件内容)。 我发现一些示例代码将所有文件内容读入一个字节数组,比如说buffer,然后将buffer设置为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);
我的问题是:如果我的输入文件很大,缓冲区大小就会超过内存限制。我可以在字节可写对象中附加一个循环,在每次迭代中写入较少的数据量吗?或者我可以给BytesWritable对象分配一个输入流,让它处理这个问题吗


谢谢。

您只需使用相当于Linux
cat
命令的HDFS即可:

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


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

我的示例代码从本地文件系统读取该文件。我想读HDFS,我想在MR的工作中这样做。谢谢