首先要了解hadoop的序列化
序列化(serialization):
序列化指的是将结构化对象转为字节流以便于通过网络进行传输或写入持久存储的过程。反序列化指的是将字节流转为一系列结构化对象的过程。
序列化用于:进程间通信与持久存储。
RPC序列化建议的特性
1.紧凑(Compact)即方便网络传输,充分利用存储空间
2.快速(Fast)即序列化及反序列化性能要好
3.扩展性(Extensible)即协议有变化,可以支持新的需求
4.互操作性(Interoperable)即客户端及服务器端不依赖语言的实现
下面示例如何为一个类实现Writablecomparable接口
public class Edge implements WritableCompatable<Edge>
{
private int a;
private String b;
@override
/**这个函数用来说明如何读入数据*/
public void readFields(DataInput in)throws IOException
{
a = in.readInt();
b = in.readUTF();
}
@override
public void write(DataOuput out)throws IOException
{
out.writeInt(a);
out.writeUTF(b);
}
@override
public int compareTo(Edge o)
{
int thisValue = this.a;
int thatValue = o.a;
return (thisValue<thatValue ? -1:(thisValue==thatValue ? 0:1));
}
}
这样实现了WriteableComparable接口的类,不仅可以当键,还可以作为值使用。