Hadoop源代码分析【IO专题】
2011-05-18 11:45
417 查看
由于Hadoop的MapReduce和HDFS都有通信的需求,需要对通信的对象进行序列化。Hadoop并没有采用Java的序列化(因为Java序列化比较复杂,且不能深度控制),而是引入了它自己的系统。org.apache.hadoop.io中定义了大量的可序列化对象,他们都实现了Writable接口。实现了Writable接口的一个典型例子如下:
其中的write和readFields分别实现了把对象序列化和反序列化的功能,是Writable接口定义的两个方法。下图给出了庞大的org.apache.hadoop.io中对象的关系。
图分析:
主要涉及各类型结构(例如IntWritable、SequenceFile[复杂结构])的序列化。红色ObjectWritable指的结构对象的序列化,其反序列化得对象获得是工厂模式通过类名创建的。GenericWritable是一种特殊的结构组合(参见http://coderplay.iteye.com/blog/259880)。
一个类实现了Camparable接口则表明这个类的对象之间是可以相互比较的,这个类对象组成的集合就可以直接使用sort方法排序。
Comparator可以看成一种算法的实现,将算法和数据分离,Comparator也可以在下面两种环境下使用:
1、类的设计师没有考虑到比较问题而没有实现Comparable,可以通过Comparator来实现排序而不必改变对象本身
2、可以使用多种排序标准,比如升序、降序等
public class MyWritable implements Writable { // Some data private int counter; private long timestamp; public void write(DataOutput out) throws IOException { out.writeInt(counter); out.writeLong(timestamp); } public void readFields(DataInput in) throws IOException { counter = in.readInt(); timestamp = in.readLong(); } public static MyWritable read(DataInput in) throws IOException { MyWritable w = new MyWritable(); w.readFields(in); return w; } }
其中的write和readFields分别实现了把对象序列化和反序列化的功能,是Writable接口定义的两个方法。下图给出了庞大的org.apache.hadoop.io中对象的关系。
图分析:
主要涉及各类型结构(例如IntWritable、SequenceFile[复杂结构])的序列化。红色ObjectWritable指的结构对象的序列化,其反序列化得对象获得是工厂模式通过类名创建的。GenericWritable是一种特殊的结构组合(参见http://coderplay.iteye.com/blog/259880)。
一个类实现了Camparable接口则表明这个类的对象之间是可以相互比较的,这个类对象组成的集合就可以直接使用sort方法排序。
Comparator可以看成一种算法的实现,将算法和数据分离,Comparator也可以在下面两种环境下使用:
1、类的设计师没有考虑到比较问题而没有实现Comparable,可以通过Comparator来实现排序而不必改变对象本身
2、可以使用多种排序标准,比如升序、降序等
相关文章推荐
- Hadoop源代码分析【IO专题-SequenceFile】
- Hadoop源代码分析【IO专题-序列化机制】
- Hadoop源代码分析(二)IO结构
- Hadoop源代码分析(完整版)
- PVFS2 源代码分析之输入输出src/io/job/job-desc-queue任务描述符队列
- Hadoop源代码分析(一)
- Hadoop源代码分析【RPC】
- Hadoop源代码分析(完整版)
- Hadoop源代码分析(七)
- Hadoop源代码分析(MapReduce概论)
- Hadoop 0.21.0 公平调度器源代码分析
- MINA2 核心源代码分析笔记 - 2. IoAcceptor与IoConnector类族 (IoService)
- Hadoop源代码分析(一)
- Hadoop源代码分析(二)
- Hadoop源代码分析(MapTask辅助类,III)
- hadoop源代码分析——block管理(一)
- Hadoop源代码分析(五)
- Hadoop源代码分析(三)
- 在windows下eclipse分析hadoop2.2.0的源代码
- Hadoop源代码分析之Configuration