Hadoop I/O操作 序列化之序列化框架和自定义Writable集合

本文介绍了Hadoop的序列化框架,包括WritableSerialization、JavaSerialization以及如何通过Serialization接口自定义序列化。同时,讨论了使用序列化IDL如Thrift和Protocol Buffers的优势,特别提到了Avro在MapReduce中的适用性。此外,还讨论了为什么不使用Java序列化以及如何自定义Writable集合以优化性能。
摘要由CSDN通过智能技术生成

序列化框架

Hadoop有一个API,专门用来替换序列化框架,不一定要使用Writable类型

1) 用Serialization来表示序列化框架,如WritableSerialization类,实现了接口org.apache.hadoop.io.serializer.Serialization,定义了序列化和反序列化

public interface Serialization<T> {
  
  /**
   * Allows clients to test whether this {@link Serialization}
   * supports the given class.
   */
  boolean accept(Class<?> c);
  
  /**
   * @return a {@link Serializer} for the given class.
   */
  Serializer<T> getSerializer(Class<T> c);

  /**
   * @return a {@link Deserializer} for the given class.
   */
  Deserializer<T> getDeserializer(Class<T> c);
}

public class WritableSerialization extends Configured
	implements Serialization<Writable>{}

之后,还需要配置属性io.serizalizations设置类名 默认值包含WritableSerialization和Avro

2) Hadoop包含名为JavaSerialization的类,使用Java的对象序列化,不如Writable高效,不推荐使用

序列化IDL(Interface Description Language)

不通过代码使用序列化框架,而使用接口描述语言,不依赖于具体语言的方式声明,有效提高互操作能力

流行的序列化框架:Apache Thrift和Google的Protocol Buffers

MapReduce有限支持上述框架,但Hadoop内部实现有一部分还是使用了上述框架

Avro非常适用于MapReduce,之后会讲

为什么不用Java序列化功能?

不满足精简,快速,可扩展,支持互操作


自定义Writable集合

自定义Writable类型,完全控制二进制表示和排序

Writable是MapReduce数据路径的核心,所以调整二进制对性能有很大的好处

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值