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接口来实现自己的数据类型。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值