Hadoop序列化与反序列化

什么是序列化和反序列

序列化定义:就是把内存中的对象,转换为字节序列,以便于存储到磁盘或网络传输,此过程被称为序列化。

反序列化定义:将字节序列或磁盘中的持久化字节数据,转换为内存中的对象的过程。

hadoop为什么需要序列化和反序列化

数据经过mapper 任务的处理后,会产生溢出文件,这些文件会被保存到磁盘上。mapper任务完成后,reducer会通过http get的方式从mapper端拷贝对应分区的数据,中间需要经过网络传输。需要做持久化(存盘)或网络传输,这中间就需要做数据的序列化和反序列操作。

为什么不使用Java自带的序列化(Serializable)

Java的序列化是一个偏重量序列化,一个对象被序列化后,会带有很多的额外的信息,比如各种校验信息、继承体系、Header,从而导致体积较大。又由于hadoop处理的数据量一般都比较大,所以该方式不利于数据的传输。

Hadoop序列化的特点:

  1. 紧凑:节省存储空间

  2. 快捷:读写数据的额外开销比较小

  3. 可扩展型更强:可以随着通讯协议升级而升级。

  4. 跨语言:支持多语言的交互。

如何使用Hadoop的序列化和反序列化

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

有些时候这些基本的类不能满足我们的开发需求,需要自定义类,那么这些自定义的类如何实现序列化和反序列化呢?

具体实现的步骤如下:

  1. 实现Writable接口

  2. 预置一个空的构造函数,这是因为在发序列化时会被调用的

java 复制代码
public Xxx(){
   super();
}

3.重写序列化的方法

java 复制代码
@Override
public void write(DataOutput out) throws IOException{
    out.writeInt(age);
    out.writeLong(xx);
    ....
}

4.重写反序列化的方法

java 复制代码
@Override
public void readFields(DataInput in) throws IOException{
    age = in.readInt();
    xx = in.readLong();
    ....
}

顺序一定要保持一致,先序列化的谁,一定要先反序列化谁。

5.重写类的toString()方法

6.如果该类需要作为Mapper的key中使用,还需要实现Comparable接口,这是因为Shuffle过程中需要对Mapper的key做排序。

相关推荐
问商十三载10 小时前
AI引擎生成式优化实践:刑事辩护律师团队IP构建
大数据·人工智能
会议咨询11 小时前
2026年大数据、信息系统与智能通信国际会议(BDIIC 2026)
大数据·信息系统·智能通信
Raas10011 小时前
MAI Gateway(魔芋企业级AI网关)能力解析:AI网关能做故障转移吗?AI网关核心功能详解
大数据·人工智能·网关·ai·gateway·mai gateway
IT研究所12 小时前
AI-ITR平台如何减少客户问题反复升级?
大数据·运维·人工智能·低代码·自然语言处理·安全架构·企微
回眸&啤酒鸭13 小时前
【回眸】OpenSwarm 多智能体协作系统实战指南
大数据·前端·人工智能
大大大大晴天13 小时前
每天认识一个组件:Apache DolphinScheduler
大数据
yumgpkpm14 小时前
Acceldata ODP(Open Data Platform)3.3.6.4(RHEL9)保姆级完整安装手册
大数据·人工智能·hive·hadoop·kafka·hbase·cloudera
邓工说电14 小时前
智慧断路器安全吗?数据加密、离线保护与合规认证全解读
大数据·数据库·人工智能·智能断路器·炜晔科技
出海客14 小时前
跨境电商多语言客服知识库怎么建:资料结构、检索边界与人工升级
大数据·人工智能
liliangcsdn14 小时前
派息率指标的应用探索和分析
大数据·算法