一、什么是序列化和反序列化?为什么要用序列化?Hadoop为什么不用Java的序列化?
1、序列化和反序列化
- 序列化:是指将内存中的对象转成字节序列以便存储到硬盘(持久化)或者在网络传输;
- 反序列化:将字节序列或者磁盘持久化文件转译成内存中的对象;
2、 为什么要序列化?
- 一般来说活得对象值存在内存中,关机断电就没了,而“活着”的对象只能由本地进程使用,不能被发送到网络上的另一台计算机。而序列化可以存储“活着”的对象,并发送到远程计算机。
3、为什么Hadoop不用Java的序列化?
Hadoop序列化的特点:
对于处理大数据的Hadoop平台,其序列化机制需要具有如下特征:
- 紧促:一个紧凑的序列化机制可以充分利用数据中心的带宽,使用高效的存储空间
- 快速:在进程间通信(包括 MapReduce过程中涉及的数据交互)时会大量使用序列化机制,因此,必须尽量减少序列化和反序列化的开销
- 可扩展:随着系统的发展,系统间通信的协议会升级,类的定义会发生变化,序列化机制需要支持这些升级和变化
- 互操作:可以支持不同开发语言间的通信,如C++和Java间的通信
Java序列化是一个重量级序列化框架(serializable),一个对象被序列化之后会附带很多额外的信息(各种校验信息,