【发布时间】:2013-05-26 00:42:11
【问题描述】:
我对 Hadoop 数据流中的序列化有点困惑。假设我有一个如下定义的 Java 对象(该对象可能比我展示的要复杂得多):
public void MyObject {
private int Field1;
private String Field2;
public void method1() {
}
...
}
要在 mapper 和 reducer 之间传输这个对象的实例,有两种方法:
第一种方法 - 我可以在映射器中一一序列化 int 字段和 String 字段并将它们写入输出,然后在减速器中,我读取它们并使用这些值创建 MyObject 的新实例。假设新创建的实例与原始实例没有区别。
第二种方法-我可以重写MyObject 来实现Writable 接口,并在映射器中序列化整个实例。然后在reducers中,我只需要反序列化对象就可以使用了。
这两种方法有什么区别?在传输之前序列化对象有什么好处。
【问题讨论】:
-
这看起来和你的其他问题一样stackoverflow.com/questions/16836607/…
-
@Tariq 我先问这个,然后我问了一个更具体的问题。但实际上它们是不同的。
-
我没有注意到时间。请不要介意。我说过它“看起来一样”而不是“一样”。
-
@Tariq 感谢您的关注。 :-) 你能回答这个问题吗?
-
您问题的第一部分已在另一个问题中介绍。对于第二部分,在传输之前序列化一个对象,使其在传输时更加网络友好,消耗更少的空间,提供更好的随机访问并为您提供更高的性能..
标签: java serialization hadoop mapreduce