hadoop3.x 序列化机制(Writable、序列化类型)

Java序列化

序列化是把 内存中的对象,转换成 二进制的字节数组,便于存储到磁盘(持久化)和网络传输。

反序列化就是将 二进制的字节数组,转换成内存中的对象。

作用

java对象只在内存中,关机断电就没有了,不能持久化,也不能发送到其他计算机使用

hadoop 与 java序列化

hadoop是分布式服务,由 n 台服务器组成,MapReduce程序 序列化后,发送到 各个服务器运行

在 wordcount程序中,使用的 IntWritable、LongWritable、Text 等,就是序列化类型

没有使用 Java的序列化

Java的序列化是一个 重量级 序列化框架(Serializable),一个对象被序列化后,会附带很多额外的信息(各种校验信息,Header,继承等),不便于在网络中高效传输

hadoop序列化

Hadoop开发了一套序列化机制:Writable 接口,提高效率,复用对象

当某个类需要在 hadoop中序列化时,需要实现 Writable 接口

序列化接口 Writable 源码

public interface Writable {
  //序列化时重写此方法
  void write(DataOutput out) throws IOException;
  //反序列化时重写此方法
  void readFields(DataInput in) throws IOException;
}

序列化接口 WritableComparable

因为 MapReduce 中的 Shuffle 过程要求 key 必须能排序

所以将 序列化对象 作为key时,还需要再实现 Comparable 接口

也可以只实现 WritableComparable 接口,该接口继承 Writable, Comparable接口

hadoop 序列化类型

Java类型 Hadoop Writable类型
Boolean BooleanWritable
Byte ByteWritable
Int IntWritable
Float FloatWritable
Long LongWritable
Double DoubleWritable
String Text
Map MapWritable
Array ArrayWritable
Null NullWritable

hadoop序列化类型,与 java类型一一对应,大部分名字都与 java类型名相同,后缀是 Writable

这些序列化类型都实现了 WritableComparable 接口,即:可以作为key使用


原文出处:/show_1IX2B5s8LxLs.html