使用Hadoop库序列化Java对象

时间:2015-04-30 01:09:58

标签: java hadoop serialization mapreduce

我正在尝试用Java序列化一个对象并将其写入一个文件,以便我的Map函数可以从文件中取出它并反序列化它以使对象恢复。

我认为Java序列化不是很优化。所以我想用hadoop库来做这件事。

有人可以与我分享一些如何做到这一点的语法。我对hadoop很新,不知道从哪里开始。对代码的一些解释也很棒!

2 个答案:

答案 0 :(得分:0)

Hadoop中的Serilization使用Avro,Parquet,Sequence File,ORC e.t.c完成...您可以在java程序中使用上述任何内容。您需要了解hadoop使用上述一种血清格式。所以你不需要那些Hadoop库。

答案 1 :(得分:0)

您应该使用Hadoop序列化,以便mapreduce作业的任何InputFormat读取输入记录。

我建议您按照以下步骤进行操作,

  
      
  1. 尝试将您的java对象转换为 Writable 的任何实现   Mapreduce如Text,IntWritable,ListWritable等。如果没有   可行使您的Java对象扩展可写接口   hadoop并实现自定义读/写方法。

  2.   
  3. 使用 SequenceFile 作为存储格式,并创建一个Java程序,使用 SequenceFile.Writer 将上述Writable对象写入   一个序列文件。请参阅Hadoop I / O章节的SequenceFile主题   Hadoop权威指南。

  4.   
  5. 现在编写一个以 SequenceFileInputFormat 作为输入的mapreduce程序   格式,您将获得序列化的Java对象           在您的映射器中逐一阅读。

  6.   

要创建自定义可写,请参阅

http://www.ashishpaliwal.com/blog/2012/05/hadoop-recipe-implementing-custom-writable/

要将可写对象写入序列文件,请参阅

How to convert .txt file to Hadoop's sequence file format