hadoop 序列化

HADOOP 的 I/O 是由传统的 I/O 系统发展而来,需要处理 PB、TB级别的数据,所以包含类一些面向海量数据处理的基本输入输出工具。

1、序列化:

   对象的序列化用于将对象编码为一个字节流,以及从字节流中重新构建对象。

   将一个对象编码成一个自己流称为序列化该对象(Serializing)

   相反的处理过程称为反序列化(Deserializing)

2、序列化有三种主要的用途:

   1)作为一种持久化格式,存储到磁盘。

   2)作为一种通信数据格式,从一个服务器传到另一个

   3)作为 copy 和 clone 的机制,序列化到内存或者缓存中,反序列化得到已存对象进行深拷贝的新对象

hadoop 主要使用了前两种用途。

3、hadoop 的序列化调用对象的 write() 方法,反序列化调用的对象的 readFields(),从流中读取数据。

      java 中的反序列化会不断的创建新的对象,hadoop 序列化机制中的反序列化,用户可以复用对象。如:在BLOCK 对象上反复调用 readFields(),可以得到同一个对象的多个反序列化结果,而不是多个反序列化的结果对象,减少了java对象的分配和回收。

      与java 序列化相比,hadoop 的序列化结果紧凑且快速。

4、hadoop 序列化的机制和特征

  1)紧凑,hadoop 是宽带稀缺类型的,I/O是瓶颈。

  2)快速,进程间通信调用了大量的序列化和反序列化。

  3)可扩展,随着发展需要支持系统的扩展和升级

  4)互操作,可以支持不同语言间的通信。

5、org.apache.hadoop.io.Writable 是所有可以序列化对象必须实现的接口

    该接口有两个方法:

     void write(DataOutput out) throws IOException;

          将(序列化)对象状态写入二进制的 DataOutput 中。

     void readFields(DataInput in) throws IOException;

          反序列化过程由readFields 从DataInput 流中读取状态完成。

6、其他比较重要的接口:WritableComparable、RawComparator、WritableComparator

     WritableComparable  提供类型比较的能力,继承自Writable, Comparable(用于类型比较)。ByteWritable,IntWritable,DoubleWritable 等基本类型对应的 Writable 类型都继承自 WritableComparable。

    RawComparator 具有比较高效的比较能力,接口允许执行者比较流中读取的未被反序列化为对象的记录,省去了创建对象的开销。

   WritableComparator 是RawComparator对WritableComparable 类的的一个通用实现。有个两主要功能:

       1、提供了一个RawComparator 的 compare()默认实现。

       2、充当了 RawComparator 实例的一个工厂方法。

除了以上介绍的 Hadoop 使用的 Writable 机制,还流行其他的序列化框架,如 Hadoop Avro,Apache Thrift 和 Google Protocol Buffer 。

1)Hadoop Avro 是一个数据序列化系统,用于支持大批量数据交换的应用。它的主要特点有:支持二进制序列化系统,可以便捷快速的处理大量的数据,动态语言友好。

2)Thrift 是一个可伸缩的、跨语言的服务开发框架,由facebook 贡献给开源社区,facebook 核心框架之一。(参考 contrib 的 thriftfs 模块)

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

在Hadoop 中简单的提供了一个序列化框架的API,用于集成各种序列化实现,该框架由 Serialization 实现(org.apache.hadoop.io.serializer包中)。

若是喜欢,帮我点个赞。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值