我想这样做:protobuf - >字节数组 - > | HTTP帖子| - >字节数组 - >序列化到本地文件 - > Hadoop中的MapReduce。
我想做的第一种方法是使用BufferedWriter / FileWriter将字节数组作为String写入带有'\ n'或其他分隔符的本地文件。这种方式的问题是写入的字节数组可能包含'\ n'或其他一些分隔符。
字节数组 - > protobuf - > json,然后将json序列化为一个文件。它会遇到与上述相同的问题。
Hadoop中有一个名为SequenceFileInputFormat的InputFormat,它似乎在Hadoop的MapReduce中使用。我的问题是如何在本地将字节数组序列化为该格式的文件?
或者任何不同的方式可以解决我的问题?谢谢。
答案 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();