博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hadoop序列化与Java序列化
阅读量:7209 次
发布时间:2019-06-29

本文共 1241 字,大约阅读时间需要 4 分钟。

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

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

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和数据交互

 

转载地址:http://qyrum.baihongyu.com/

你可能感兴趣的文章
从storyboard加载视图控制器
查看>>
最近的想法
查看>>
php中heredoc的使用方法
查看>>
用DevExpress做界面开发:ASP.NET界面开发框架
查看>>
php命令行(cli)下相对路径的问题
查看>>
浅析android应用增量升级
查看>>
Centos查看IP地址
查看>>
python线程安全队列用法
查看>>
easyUI初体验
查看>>
Android屏幕适配和文字屏幕适配
查看>>
Docker CE for CentOS的安装(对官方文档的翻译)
查看>>
数据库设计笔记一
查看>>
VC++六种Runtime Library
查看>>
服务端自动集成-山寨版
查看>>
docker搞个wordpress
查看>>
电商商城系统活动设计
查看>>
su 切换,提示:“密码不正确”;
查看>>
百家搜索:在网站中添加Google、百度等搜索引擎
查看>>
Android gradlew 多渠道打包
查看>>
网络初体验
查看>>