我正在尝试用Java序列化一个对象并将其写入一个文件,以便我的Map函数可以从文件中取出它并反序列化它以使对象恢复。
我认为Java序列化不是很优化。所以我想用hadoop库来做这件事。
有人可以与我分享一些如何做到这一点的语法。我对hadoop很新,不知道从哪里开始。对代码的一些解释也很棒!
答案 0 :(得分:0)
Hadoop中的Serilization使用Avro,Parquet,Sequence File,ORC e.t.c完成...您可以在java程序中使用上述任何内容。您需要了解hadoop使用上述一种血清格式。所以你不需要那些Hadoop库。
答案 1 :(得分:0)
您应该使用Hadoop序列化,以便mapreduce作业的任何InputFormat读取输入记录。
我建议您按照以下步骤进行操作,
尝试将您的java对象转换为 Writable 的任何实现 Mapreduce如Text,IntWritable,ListWritable等。如果没有 可行使您的Java对象扩展可写接口 hadoop并实现自定义读/写方法。
使用 SequenceFile 作为存储格式,并创建一个Java程序,使用 SequenceFile.Writer 将上述Writable对象写入 一个序列文件。请参阅Hadoop I / O章节的SequenceFile主题 Hadoop权威指南。
- 醇>
现在编写一个以 SequenceFileInputFormat 作为输入的mapreduce程序 格式,您将获得序列化的Java对象 在您的映射器中逐一阅读。
要创建自定义可写,请参阅
http://www.ashishpaliwal.com/blog/2012/05/hadoop-recipe-implementing-custom-writable/
要将可写对象写入序列文件,请参阅