我对hadoop数据流中的序列化有点困惑。假设我有一个java对象,定义如下(该对象可能比我显示的要复杂得多):
public void MyObject {
private int Field1;
private String Field2;
public void method1() {
}
...
}
要在Map器和还原器之间传输此对象的示例,有两种方法:
第一种方法-我可以在mapper中逐个序列化int字段和string字段并将它们写入输出,然后在reducer中读取它们并创建 MyObject
使用这些值。假设新创建的示例与原始示例没有区别。
第二种方法-我可以重写 MyObject
实施 Writable
接口,并在Map器中序列化整个示例。然后在reducers中,我只需要反序列化对象,就可以使用它了。
这两种方法有什么区别?在传输对象之前序列化对象有什么好处。
1条答案
按热度按时间atmip9wb1#
hadoop软件
Writable
与java可序列化文件相比,它更紧凑,需要更少的空间。hadoopmapper和reducer处理扩展hadoops属性的对象Writable
接口。有关详细信息,请参阅https://stackoverflow.com/a/16839597/1150329