zoukankan      html  css  js  c++  java
  • 【转】[Hadoop源码解读]【IO专题】

    由于Hadoop的MapReduce和HDFS都有通信的需求,需要对通信的对象进行序列化。Hadoop并没有采用Java的序列化(因为Java序列化比较复杂,且不能深度控制),而是引入了它自己的系统。org.apache.hadoop.io中定义了大量的可序列化对象,他们都实现了Writable接口。实现了Writable接口的一个典型例子如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    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、可以使用多种排序标准,比如升序、降序等

  • 相关阅读:
    sgu101Domino
    KM模版
    UVA11383 Golden Tiger Claw(KM算法)
    POJ3565Ants(KM算法)
    POJ3041Asteroids(二分图最小点覆盖)
    UVA1175 Ladies' Choice(稳定婚姻问题,二分图)
    POJ1273Drainage Ditches(裸的最大流)
    UVA1201 Taxi Cab Scheme(POJ2060)DAG的最小路径覆盖
    二分图最大匹配数模版
    11419 SAM I AM(二分图)
  • 原文地址:https://www.cnblogs.com/conie/p/3583607.html
Copyright © 2011-2022 走看看