要实现Writable
接口,对象可以在Hadoop中进行序列化。那么Hadoop Writable
和java.io.serialization
之间的联系和区别是什么?
要实现Writable
接口,对象可以在Hadoop中进行序列化。那么Hadoop Writable
和java.io.serialization
之间的联系和区别是什么?
Java Serializable
Serializable不假设已知存储值的类,并将实例标记为其类,即写入关于对象的元数据,其中包括类名,字段名称和类型以及其超类。 ObjectOutputSream和ObjectInputStream对此进行了一定的优化,因此在第一次之后,对于该类的实例,会写入5字节的句柄。但是使用句柄的对象序列不能随机访问,因为它们依赖于流状态。这使得像排序之类的事情变得更加复杂。
Hadoop Writable
定义“Writable”时,您知道预期的类。因此,在反序列化时,您知道预期的内容,所以Writables不会将其类型存储在序列化表示中。例如,如果输入键是LongWritable,则要求空的LongWritable实例从输入数据流中填充自身。由于不需要存储元信息(类名、字段及其类型、超类),这导致二进制文件更紧凑,直接的随机访问和更高的性能。
一些好读物:
Java Serializable:
Hadoop Writable
你必须阅读一遍这个thread。