`
miluroe
  • 浏览: 4057 次
  • 性别: Icon_minigender_1
最近访客 更多访客>>
社区版块
存档分类
最新评论

Hadoop源代码分析——io.*(一)

阅读更多

    背景知识:

    Hadoop类、接口的标识:

    Hadoop的类、接口文件都要引入两个类InterfaceAudience;InterfaceStability;InterfaceAudience用于标   记该类文件可以被访问的权限。熟悉的有public、private。LimitedPrivate 只能在归属的架构中例如HDFS、HBase中被引用。InterfaceStability用于标记该类文件相对于Hadoop版本升级的稳定性。Stable:只有在主版本升级时可能不兼容。Evolving: 在子版本升级时可能不兼容。Unstable:最不稳定的,兼容性在任何版本下都无法提前预知、保证。

 

    序列化:将对象转换为字节流的方法。可以用于(1)进程间的通信(2)数据持久性存储。

 

    interface Writable

    Writable是对Java IO中的DataOutput、DataInput的封装,因此实现实现Writable接口对数据进行序列化。

    Hadoop中的数据类型、包括自定以的数据类型均要作为key、value传输、写入HDFS,因此都要实现Writable。这也是Hadoop不采用Java原始数据类型的原因。

 

    Writable定义了

        void write(DataOutput out) throws IOException;

        void readFields(DataInput in) throws IOExceptio;

    二者用来读、写字段。

    

    interface WritableComparable<T>

    继承了Writable, Comparable<T>。

    Map-Reduce框架中作为key的数据类型需要实现该接口。可以自定义某一数据类型同类之间比较方法以及生成该类型数据hashCode方法。

    参考陆驾恒的《Hadoop实战》中表格:

        JAVA基本类型      Writable中的类型         序列化后字节数
             boolean       BooleanWritalbe                  1
                byte          ByteWritable                  1
                 int           IntWritable                  4
           VIntWritable                 1-5
               float         FloatWritable                  4
               long         LongWritable                  8
         VLongWritalbe                 1-9
              double        DoubleWritable                  8

 

    以下是官方编写compareTo方法,可以比较int大小this.int < int 返回-1;

    public int compareTo(MyWritableComparable o) {

         int thisValue = this.value;

         int thatValue = o.value;

         return (thisValue < thatValue ? -1 : (thisValue==thatValue ? 0 : 1));

       }

    

    此外,BinaryComparable类实现了二进制数组的比较。

    通过以上的介绍,我们可以通过实现Writable、WritalbeComparable接口来实现自己的数据类型。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics