Hadoop Common 之序列化机制小解

1.Java Serializable序列化

该序列化通过ObjectInputStreamreadObject实现序列化,ObjectOutputStreamwriteObject实现反序列化。这不过此种序列化虽然跨病态兼容性强,但是因为存储过多的信息,但是传输效率比较低,所以hadoop弃用它。(序列化信息包括这个对象的类,类签名,类的所有静态,费静态成员的值,以及他们父类都要被写入)

public class User implements Serializable{
    private Long serializableId=xxxxL;  //需要指定序列化ID,用来唯一标识
}
2.Hadoop Writable序列化

由于Java Serializable序列化将每个对象的类名写入输出流中,这导致了java序列化需要占用比原对象更多的内存空间。同时java序列化会不断的创建新的对象,对mapreduce任务来说,不能重用对象,在已有的对象上进行反序列化操作,而是不断从地创建反序列化的各种类型的记录,这回带来大量的系统开销。

Hadoop Writable序列化机制需要重写write和readFields方法。并提供了DataInput进行序列化,DataOutput进行反序列化write方法简单地把这个变量写入到二进制流中,readFIelds则依次读入该流中的二进制数据,并做必要的检查。

3.其他Hadoop序列化框架

Avro:是一个数据序列化系统,用于支持大批量数据交换的应用。它的主要特点有:支持二进制序列化方式,可以便携、快速的处理大量数据,动态语言良好,Avro提供的机制使动态语言可以方便的处理Avro数据。

Thrift:facebook开源的

Google Protobuffer:是Google内部的混合语言数据标准,提供了一种轻便高效的结构化数据存储格式,目前ProtoBuffer提供了C++,Java,Python三种语言的API,广泛应用于Google内部通信协议,数据存储等领域中。

注:序列化是为了进行跨网络传输传输,如果是海量数据的话,可以采用Snappy压缩(其在Google的生产环境中经过了PB级数据压缩的考验-----因特尔酷睿i7)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值