如何使用SequenceFileInputFormat将字节数组序列化为本地文件

时间:2013-12-20 12:21:39

标签: hadoop file-io mapreduce bytearray protocol-buffers

我想这样做:protobuf - >字节数组 - > | HTTP帖子| - >字节数组 - >序列化到本地文件 - > Hadoop中的MapReduce。

  1. 我想做的第一种方法是使用BufferedWriter / FileWriter将字节数组作为String写入带有'\ n'或其他分隔符的本地文件。这种方式的问题是写入的字节数组可能包含'\ n'或其他一些分隔符。

  2. 字节数组 - > protobuf - > json,然后将json序列化为一个文件。它会遇到与上述相同的问题。

  3. Hadoop中有一个名为SequenceFileInputFormat的InputFormat,它似乎在Hadoop的MapReduce中使用。我的问题是如何在本地将字节数组序列化为该格式的文件?

  4. 或者任何不同的方式可以解决我的问题?谢谢。

1 个答案:

答案 0 :(得分:0)

好的,问题现在已经解决了。

org.apache.hadoop.io.SequenceFile.Writer适合我。

Configuration conf = new Configuration();
LocalFileSystem fs = FileSystem.getLocal(conf);
SequenceFile.Writer writer = SequenceFile.createWriter(fs, conf, new Path("~/test"), LongWritable.class, BytesWritable.class);
LongWritable key = new LongWritable(1L);
BytesWritable val = new BytesWritable(protobufObject.toByteArray());
writer.append(key, val);
writer.close();