2

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

public void MyObject {

  private int Field1;
  private String Field2;

  public void method1() {

  }

  ...

}

要在 mapper 和 reducer 之间传输这个对象的实例,有两种方法:

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

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

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

4

1 回答 1

1

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

于 2013-05-30T15:08:29.633 回答