为什么hadoop要自己建立序列化框架

来源:互联网 发布:sql数据库基本语句 编辑:程序博客网 时间:2024/04/30 03:21

最主要有:
一:精简性
java序列化后数据过大,有很多不需要的信息包括类名(同一种类后续出现引用第一次出现的句柄,句柄不适合随机读取而且占用空间大)

  1. java序列化后的数据中保留有该对象的类型名等信息,用来反序列化.在反序列化过程中,将使用该类的公用或受保护的无参数构造方法初始化不可序列化类的字段。可序列化的子类必须能够访问无参数构造方法。可序列化子类的字段将从该流中恢复.序列化运行时使用一个称为
    serialVersionUID
    的版本号与每个可序列化类相关联,该序列号在反序列化过程中用于验证序列化对象的发送者和接收者是否为该对象加载了与序列化兼容的类。如果接收者加载的该对象的类的
    serialVersionUID 与对应的发送者的类的版本号不同,则反序列化将会导致
    InvalidClassException。可序列化类可以通过声明名为 “serialVersionUID” 的字段(该字段必须是静态
    (static)、最终 (final) 的 long 型字段)显式声明其自己的 serialVersionUID:

    private void writeObject(java.io.ObjectOutputStream out)
    throws IOException
    private void readObject(java.io.ObjectInputStream in)
    throws IOException, ClassNotFoundException;
    private void readObjectNoData()
    throws ObjectStreamException;

    而hadoop的二进制流中不会记录类名.客户端已经知道数据类型,所以可以让数据流中每一条记录独立与其他,这样保证了随机存储和排序的可能性.

二.hadoop的WriteableComparable接口可以减小开销.

  • 而hadoop的节点间通信通过RPC实现.hadoop继承WriteableComparable接口,其类型比较继承自Java
    Comparator的rawComparator,允许hadoop直接比较二进制流中数据而不必先反序列化为对象.减少了比较对象时建立对象带来的系统开销.
    其次,从数据流中反序列化对象时,Writeable接口允许对象重用.对于大量的对象反序列化我们可以先建立一个私有化对象,然后不断给对象赋值来实现只建立一次对象的反序列化.

三:可拓展性:可以引入新的协议
四:互操性:支持不同语言

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 怀孕七周孕酮低怎么办 孕前检查孕酮低怎么办 甘油三酯偏高7.2怎么办 入职体检来例假怎么办 6激素检查喝水了怎么办 抽血前吃了东西怎么办 怀孕一个月孕酮低怎么办 怀孕了老是有痰怎么办 孕妇有很多白痰怎么办 血糖高怎么办吃什么好 5年糖尿病血糖高怎么办 血糖高引起的视力模糊怎么办 谷丙转氨酶和谷草转氨酶高怎么办 产检血糖有点高怎么办 孕期餐后血糖高怎么办 怀孕12周血糖高怎么办 怀孕2个月血糖高怎么办 怀孕7个月血糖高怎么办 孕妇7个月血糖高怎么办 空腹血糖6%2e7怎么办 血糖和尿酸都高怎么办 血糖高的孕妇便秘怎么办 血糖低怎么办吃什么好 孕检空腹血糖高怎么办 怀孕4个月血糖高怎么办 怀孕3个月血糖高怎么办 怀孕6个月血糖高怎么办 孕29周血糖高怎么办 餐后血糖偶尔高怎么办 歺后血糖9.8高怎么办 怀孕5个月血糖高怎么办 歺后2小时血糖高怎么办 怀孕餐后血糖高怎么办 老人餐后血糖高怎么办 血糖高尿糖不高怎么办 小孩鼻子不通气怎么办特效方法 婴儿20天不大便怎么办 新生儿8天没大便怎么办 新生儿2天没大便怎么办 新生儿4天没大便怎么办 2岁宝宝便秘严重怎么办