Hadoop序列化
Hadoop序列化
序列化就是吧内存中的对象没转换成字节序列,以便于存储到磁盘和网络传输。
反序列化就是将收到的字节序列,或者磁盘的持久化数据,转换成内存中的对象。
为什么需要序列化
一般来说获得对象滋生存在内存里,关机断电就没了,而且活的对象只能由本地的进程使用,不能被发送到网路上的另外一台计算机,然而序列化可以存储活的对象,可以将活的对象发送到远程计算机。
为什么不用Java的序列化
Java的序列化是一个重量级序列化框架,一个对象被序列化以后,会附带很多额外的信息,不便于在网络中高效的传输。所以Hadoop自己开发了一套序列化机制。
Hadoop序列化特点:
1、紧凑
2、快速
3、可扩展
4、互操作
自定义bean对象实现序列化接口
在企业开发中往往常用的基本序列化类型不能满足所有需求,比如在Hadoop框架内部传递一个bean对象,那么该对象就需要实现序列化接口。
具体实现bean对象序列化步骤如下7步。
(1)必须实现Writable接口
(2)反序列化时,需要反射调用空参构造函数,所以必须有空参构造
(3)重写序列化方法
(4)重写反序列化方法
(5)注意反序列化的顺序和序列化的顺序完全一致
(6)要想把结果显示在文件中,需要重写toString(),可用”\t”分开,方便后续用。
(7)如果需要将自定义的bean放在key中传输,则还需要实现Comparable接口,因为MapReduce框中的Shuffle过程要求对key必须能排序。