MapReduce 的 序列化
序列化(Serialization)是指把结构化对象转化为字节流。
反序列化(Deserialization)是序列化的逆过程。把字节流转为结构化对象。
当要在进程间传递对象或持久化对象的时候,就需要序列化对象成字节流,
反之当要将接收到或从磁盘读取的字节流转换为对象,就要进行反序列化。
Java 的序列化(Serializable)是一个重量级序列化框架,一个对象被序列
化后,会附带很多额外的信息(各种校验信息,header,继承体系…),不便于
在网络中高效传输;所以,hadoop 自己开发了一套序列化机制( Writable),精
简,高效。不用像 java 对象类一样传输多层的父子关系,需要哪个属性就传输
哪个属性值,大大的减少网络传输的开销。
Writable是Hadoop的序列化格式,hadoop定义了这样一个Writable接口。
一个类要支持可序列化只需实现这个接口即可。
public interface Writable {
void write(DataOutput out) throws IOException;
void readFields(DataInput in) throws IOException;
}
MapReduce编写规范
mapper对象的编写流程
1,确定map传入文本的格式类型,输入类型,输入行类型,输出key类型,输出value类型(ps,可以通过hadoop自带的序列化和反序列化来进行输出value的对象传输)
2,实现相应的map方法,一般按空格来对value进行操作,进行分类规约
3,通过context.write(k,v)方法写
Reducer对象的编写流程
1,reduce实现相应的reduce方法,传入文本的格式类型,输入mapper key类型,输入mapper value类型,输出key类型,输出value类型(ps,可以通过hadoop自带的序列化和反序列化来进行输出value的对象传输)
将数据进行分区
job.setNumReduceTasks(3);
job.setPartitionerClass(输入相应的分区规则的类);
本文详细介绍了MapReduce中的序列化概念,包括序列化与反序列化的过程,以及Hadoop自定义的轻量级序列化机制Writable。此外,还阐述了MapReduce中mapper和reducer对象的编写流程,以及如何通过设置分区规则来优化数据处理。
657

被折叠的 条评论
为什么被折叠?



