关于Hadoop中的序列化:序列化有哪些优势?

时间:2013-05-30 12:27:49

标签: java serialization hadoop mapreduce

我对Hadoop数据流中的序列化感到有些困惑。假设我有一个如下定义的Java对象(该对象可能比我显示的要复杂得多):

public void MyObject {

  private int Field1;
  private String Field2;

  public void method1() {

  }

  ...

}

要在映射器和缩减器之间传输此对象的实例,有两种方法:

第一种方法 - 我可以在mapper中逐个序列化int字段和String字段并将它们写入输出,然后在reducers中,我读取它们并使用这些值创建MyObject的新实例。假设新创建的实例与原始实例相比没有区别。

第二种方法 - 我可以重写MyObject来实现Writable接口,并在mappers中序列化整个实例。然后在reducers中,我只需要反序列化对象,我就可以使用它。

这两种方法有什么区别?在传输对象之前序列化对象有什么好处。

1 个答案:

答案 0 :(得分:1)

与Java可序列化相比,Hadoop Writable更紧凑,占用的空间更少。 Hadoop映射器和reducers处理扩展Hadoops的Writable接口的对象。有关详细信息,请参阅https://stackoverflow.com/a/16839597/1150329