hadoop序列化机制与java序列化机制对比

1、采用的方法:

      java序列化机制采用的ObjectOutputStream 对象上调用writeObject() 方法; Hadoop 序列化机制调用对象的write() 方法,带一个DataOutput 类型的参数;

2、反序列化过程:

      两者都是从流中读取数据,java的反序列化过程会不断的创建新的对象;Hadoop反序列化机制不断的复用对象(在Block 的某个对象上反复调用readFields(),可以在同一个对象上得到多个反序列化的结果,而不是多个反序列化的结果对象(对象被复用了),这减少了Java 对象的分配和回收,提高了应用的效率)

3、hadoop序列化的特征:

❑ 紧凑:由于带宽是Hadoop 集群中最稀 缺的资源,一个紧凑的序列化机制可以充分利用数据中心的带宽。
❑ 快速:在进程间通信(包括MapReduce 过程中涉及的数据交互)时会大量使用序列
化机制,因此,必须尽量减少序列化和反序列化的开销。
❑ 可扩展:随着系统的发展,系统间通信的协议会升级,类的定义会发生变化,序列化
机制需要支持这些升级和变化。
❑ 互操作:可以支持不同开发语言间的通信,如C++ 和Java 间的通信。这样的通信,
可以通过文件(需要精心设计文件的格式)或者后面介绍的IPC 机制实现。

java的序列化会将类名写入输出流中,占用较多的存储空间,同时同一类的不同对象在序列化时会共享一份元数据,会通过某种引用指向这份元数据,故在序列化时的输出流时需要维持某种状态,对一个大文件不能切割,加之java的反序列化会创建新的对象,造成空间上的浪费,所以java的序列化在hadoop的场景下,不适合

下一篇将分析,hadoop序列化是如何做快速、紧凑、可扩展及互操作的?

你可能感兴趣的:(hadoop序列化机制与java序列化机制对比)