序列化:序列化就是把内存的对象,转换成为字节序列(或者是其他的数据传输协议)以便于存储到磁盘(持久化)和网络传输。
反序列化:就是将收到的字节序列(或者其他的数据传输协议)或者是磁盘的持久化数据,转换成内存中的对象。
为什么要进行序列化:因为序列化后可以很方便的存储或者在网络中传输(不进行序列化的话无法将本地的数据通过网络发送到另一台计算机上)。从服务器硬盘上把序列化的对象取出,然后通过网络传到客户端,再由客户端把序列化的对象读入内存,执行相应的处理。
hadoop文件的序列化为什么不采用java的序列化机制?
(1)java的序列化机制在每个类的对象第一次出现的时候保存了每个类的信息,比如类名,第二次出现类对象的时候会有一个类的详细信息,导致空间上面的浪费。
(2)java的序列化机制不能复用对象,并且java反序列化的时候每次都要构造出新的对象,在hadoop的序列化机制中,反序列化的对象是可以复用的。
hadoop序列化的特点:
(1)紧凑,紧凑的格式可以提高传输效率,充分利用网络带宽,因为网络的带宽是数据的一种非常总要的资源。
(2)快速,读写数据的额外开销小。
(3)可扩展,通信协议为了满足一些新的需求,比如在方法调用的过程总增加了新的参数,或者新的服务器系统要能够接受老客户端的旧格式消息,hadoop的这种可扩展型就可以满足这种需求。
(4)互操作:支持多语言的交互。