将二进制数据从hdfs文件写入sequencefile

t3irkdon  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(676)

我在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对象分配一个输入流,让它处理这个问题吗?
谢谢。

kxxlusnw

kxxlusnw1#

您只需使用相当于linux的hdfs cat 命令: hadoop fs -cat '/path/to/files/*.' > oneBigSequenceFile.csv 它将连接一个序列文件中的所有文件。

相关问题