1序列化和反序列化
序列化(Serialization)就是结构化的对象转化为字节流,这样可以方便在网络上传输和写入磁盘进行永久存储(原因看完这部分后就明白了)。反序列化(deserialization)就是指将字节流转回结构化对象的逆过程。
序列化和反序列化在分布式数据处理里主要出现在进程间通行和永久存储两个应用领域。在Hadoop 系统中,系统中多个节点上的进程间通信是通过远程过程调用(romote procedure call,R PC)实现的,RPC协议将消息序列转化为二进制流后发送到远程节点,远程节点接着将二进制流反序列化为消息,所以RPC对于序列化有以下要求(也就是进程间通信对于序列化的要求):
(1)紧凑,紧凑的格式可以提高传输效率,充分利用网络带宽,要知道网络带宽是数据中心的一种非常重要的资源。
(2)快速,进程间通信是分布是系统的重要内容,所以必须减少序列化和反序列化的开销,这样可以提高整个分布式系统的性能。
(3)可扩展,通信协议为了满足一些新的需求,比如在方法调用的过程中增加新的参数,或者新的服务器系统要能够接受老客户端的旧的格式的消息,这样就需要直接引进新的协议,序列化必须满足可扩展的要求。
(4)互操作,可以支持不同语言写的客户端(比如C++、java、Python等等)与服务器交互。
前面说了序列化的目的是可以方便在网络上传输和写入磁盘进行永久存储,前面讲了进程间通信对于序列化的要求,下面来说一说数据永久存储对于序列化的要求。前面说的4个序列化的要求也是数据永久存储所要求的,存贮格式紧凑可以高效的利用存储空间,快速可以减少读写数据的额外开销,可扩张这样就可以方便的读取老格式的数据,互操作就可以满足不同的编程序言来读写永久存贮的数据。