序列化
序列化与反序列化的概念
序列化
是指将结构化对象转化成字节流在网上传输或写到磁盘进行永久存储的过程
反序列化
是指将字节流转回结构化对象的逆过程
序列化的应用
序列化用于分布式数据处理的两大领域
1. 进程间通信
2. 永久存储
序列化的格式要求
1. 紧凑:体积小,节省带宽
2. 快速:序列化过程快速
3. 可扩展:新API支持旧数据格式
4. 支持互操作:跨语言
Writable 接口
说明
Hadoop 使用的序列化格式为 Writable
Writable 接口定义了两个方法
1. write 将对象写入 DataOutput 二进制流
2. readFields 从 DataInput 二进制流读取对象
Writable 接口实现类
Writable 接口实现类包含以下
1. int 对应的 Writable 为 IntWritable
2. Long 对应的 Writable 为 LongWritable
3. String 对应的 Writable 为 Text
以 IntWritable 为例,在阅读源码之后发现
可以直接通过 new 的方式直接带参创建实例化对象
也可以调用空参构造创建实例化对象之后通过 set 方法赋值
IntWritable 案例
使用 IntWritable 实现 Hadoop 的序列化与反序列化
1 | import org.apache.hadoop.io.IntWritable; |
自定义 PersonWriteable
自定义Person类
1 | import java.io.Serializable; |
自定义 PersonWriteable
1 | import org.apache.hadoop.io.Writable; |
Person的序列化测试类
1 | import org.junit.Test; |