我在hdfs中有很多文件,想通过job先生把它们复制成序列文件。seq文件的键类型是text(我使用sha1),值类型是byteswritable(文件内容)。我发现一些示例代码将所有文件内容读入字节数组,比如说buffer,然后将buffer设置为bytewriteable对象。前任:
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);
我的问题是:如果我的输入文件很大,缓冲区大小就会超过内存限制。我可以用循环附加到bytewriteable对象上,循环在每次迭代中写入的数据量更小吗?或者我可以给byteswritable对象分配一个输入流,让它处理这个问题吗?
谢谢。
1条答案
按热度按时间kxxlusnw1#
您只需使用相当于linux的hdfs
cat
命令:hadoop fs -cat '/path/to/files/*.' > oneBigSequenceFile.csv
它将连接一个序列文件中的所有文件。