Hadoop序列化与Java序列化

序列化就是把内存中的对象的状态信息转换成字节序列,以便于存储(持久化)和网络传输

反序列化就是就将收到的字节序列或者是硬盘的持久化数据,转换成内存中的对象。

1.JDK的序列化

  只要实现了serializable接口就能实现序列化与反序列化,一定要加上序列化版本ID serialVersionUID,这个是用来识别序列化的之前的类到底是哪一个。比如希望类的不同版本对序列化兼容,需要确保类的不同版本具有相同的serialVersionUID;

  Java序列化算法需要考虑:

  将对象实例相关的类元数据输出。

  递归地输出类的超类描述直到不再有超类。

  类元数据完了之后,开始从最顶层的超类开始输出对象实例的实际数据值

  从上至下递归输出实例的数据

  所以java序列化很强大,序列化得到的信息很详细,但是序列化后很占内存。

2.Hadoop序列化

  相对于JDK比较简洁,在急群众信息的传递主要就是靠这些序列化的字节楼来传递的,所以更快速度,容量更小。

  hadoop序列化特点:

  1.紧凑:带宽是集群中信息传递的最宝贵的资源所以我们必须想法设法缩小传递信息的大小 。

     java序列化不够灵活,为了更好的控制序列化的整个流程所以使用Writable 

   java序列化会保存类的所有信息 依赖等,hadoop序列化不需要

  2.对象可重用:JDK的反序列化会不断地创建对象,这肯定会造成一定的系统开销,但是在hadoop的反      序列化中,能重复的利用一个对象的readField方法来重新产生不同的对象。

     java序列化每次序列化都要重新创建对象,内存消耗大。Writable可以重用。

  3.可拓展性

    hadoop自己写序列化很容易,可以利用实现hadoop的Writable接口 实现了直接比较字符流以确定两个Writable对象的大小。

   而java不是,java的序列化机制在每个类的对象第一次出现的时候保存了每个类的信息, 比如类名, 第二次出现的类对象会有一个类的reference, 导致空间的浪费

     可以使用开源的序列化框架protocol Buffers,Avro等框架

     hadoop原生的序列化类需要实现一个叫Writeable的接口,类似于serializable接口

    实现Writable接口必须实现两个方法:write(DataOutputStream out);readField(DataInputStream in)方法。

  YARN的序列化就是用Google开发的序列化框架protocol Buffers,proto目前支持支持三种语言C++,java,Python所以RPC这一层我们就可以利用其他语言来做文章

  Apache的Thrift和Google的Protocol Buffer也是比较流行的序列化框架,但是在Hadoop里使用是有限的,只用于RPC和数据交互

时间: 2024-10-12 19:13:06

Hadoop序列化与Java序列化的相关文章

Java 序列化深入分析

序列化机制介绍 ??序列化是指把对象转换成有序字节流,以便在网络上传输或者保存在本地文件中.序列化后的字节流保存了Java对 象的状态以及相关的描述信息.客户端从文件中或网络上获得序列化后的对象字节流后,根据字节流中所保存的对象状态及描述信息,通过反序列化重建对象.本质上讲,序列化就是把实体对象状态按照一定的格式写入到有序字节流,反序列化就是从有序字节流重建对象,恢复对象状态.序列化机制的核心作用就是对象状态的 保存与重建. Java序列化机制解析 ??Java API提供了对序列化的支持,要实

Java序列化与反序列化学习(三):序列化机制与原理

Java序列化算法透析 Serialization(序列化)是一种将对象以一连串的字节描述的过程:反序列化deserialization是一种将这些字节重建成一个对象的 过程.Java序列化API提供一种处理对象序列化的标准机制.在这里你能学到如何序列化一个对象,什么时候需要序列化以及Java序列化的算法,我们用 一个实例来示范序列化以后的字节是如何描述一个对象的信息的. 序列化的必要性 Java中,一切都是对象,在分布式环境中经常需要将Object从这一端网络或设备传递到另一端.这就需要有一种

Java序列化机制剖析

Java序列化算法透析 Serialization(序列化)是一种将对象以一连串的字节描述的过程:反序列化deserialization是一种将这些字节重建成一个对象的过程.Java序列化API提供一种处理对象序列化的标准机制.在这里你能学到如何序列化一个对象,什么时候需要序列化以及Java序列化的算法,我们用一个实例来示范序列化以后的字节是如何描述一个对象的信息的. 序列化的必要性 Java中,一切都是对象,在分布式环境中经常需要将Object从这一端网络或设备传递到另一端.这就需要有一种可以

Java 序列化Serializable详解(附详细例子)

1.什么是序列化和反序列化 Serialization(序列化)是一种将对象以一连串的字节描述的过程:反序列化deserialization是一种将这些字节重建成一个对象的过程. 2.什么情况下需要序列化  a)当你想把的内存中的对象保存到一个文件中或者数据库中时候: b)当你想用套接字在网络上传送对象的时候: c)当你想通过RMI传输对象的时候: 3.如何实现序列化 将需要序列化的类实现Serializable接口就可以了,Serializable接口中没有任何方法,可以理解为一个标记,即表明

Java序列化机制和原理

Java序列化算法透析 Serialization(序列化)是一种将对象以一连串的字节描述的过程:反序列化deserialization是一种将这些字节重建成一个对象的过程.Java序列化API提供一种处理对象序列化的标准机制.在这里你能学到如何序列化一个对象,什么时候需要序列化以及Java序列化的算法,我们用一个实例来示范序列化以后的字节是如何描述一个对象的信息的. 序列化的必要性 Java中,一切都是对象,在分布式环境中经常需要将Object从这一端网络或设备传递到另一端. 这就需要有一种可

java序列化对象简单理解

1. 什么是Java对象序列化 Java平台允许我们在内存中创建可复用的Java对象,但一般情况下,只有当JVM处于运行时,这些对象才可能存在,即,这些对象的生命周期不会比JVM的生命周期更长.但在现实应用中,就可能要求在JVM停止运行之后能够保存(持久化)指定的对象,并在将来重新读取被保存的对象.Java对象序列化就能够帮助我们实现该功能. 使用Java对象序列化,在保存对象时,会把其状态保存为一组字节,在未来,再将这些字节组装成对象.必须注意地是,对象序列化保存的是对象的"状态",

各种Java序列化性能比较

转载:http://www.jdon.com/concurrent/serialization.html 这里比较Java对象序列化 XML JSON  Kryo  POF等序列化性能比较. 很多人以为JDK的Java序列化肯定是将Java对象转换成二进制序列化最快的方式,JDK7出来以后,我们发现实际上每次新的JDK比旧版本快. 我们通常以为将Java对象序列化成二进制比序列化成XML或Json更快,其实是错误的,如果你关心性能,建议避免Java序列化. Java序列化有很多的要求,最主要的一

[Z]Java 序列化笔记

下午修改了一个Dubbo服务,添加了一个int型的传参,发布后出现问题,基本数据类型没有实现序列化接口.想起最开始学习Spring的就了解过Bean应该实现 Serializable 接口,当时还想过Serializable 作为一个空的接口有什么意义 , 马克一篇序列化的文章. by http://www.blogjava.net/jiangshachina/archive/2012/02/13/369898.html 1. 什么是Java对象序列化    Java平台允许我们在内存中创建可复

java序列化的机制与原理

有关Java对象的序列化和反序列化也算是Java基础的一部分,下面对Java序列化的机制和原理进行一些介绍. Java序列化算法透析 Serialization(序列化)是一种将对象以一连串的字节描述的过程:反序列化deserialization是一种将这些字节重建成一个对象的过程.Java序列化API提供一种处理对象序列化的标准机制.在这里你能学到如何序列化一个对象,什么时候需要序列化以及Java序列化的算法,我们用一个实例来示范序列化以后的字节是如何描述一个对象的信息的. 序列化的必要性 J