Writable子接口:
Hadoop引入org.apache.hadoop.io.Writable接口,是所有可序列化对象必须实现的接口
在hadoop2.71.中,Writable共有6个子接口:
Counter,CounterGroup,CounterGroupBase<T>,InputSplit,InputSplitWithLocationInfo,WritableComparable<T>
在org.apache.hadoop.io中有一个:WritableComparable<T>
WritableComparable,顾名思义,它提供类型比较的能力,WritableComparable
s 能够通过 Comparator
s进行互相比较。主要是针对MapReduce而设计的,中间有个排序很重要。在 Hadoop Map-Reduce framework中,任何key值类型都要实现这个接口。WritableComparable是可序列化的,所以,同样实现了readFiels()和write()这两个序列化和反序列化方法,它多了一个比较的能力,所以实现compareTo()方法,该方法即是比较和排序规则的实现,因此,使用该类的实现类MR中的key值就既能可序列化又是可比较的。当然了,如果仅是做为值使用的话,仅实现Writable接口即可,接下来也要重点介绍WritableComparable这个接口。
另外在org.apache.hadoop.io还有一个相关接口:WritableFactory
同时在这个包里有一个实现类:WritableFactories
其目的就是将所有Writable类型注册到WritableFactories里统一治理,利用WritableFactories形成注册到这里的Writable对象,这种统一管理的方式主要提供系统可用Writable类型的方便性。如若系统规模很大,Writable类型对象四处疏散在系统,那么有时不能很直观地看到一个类型是否是Writable类型。通过这个WritableFactory你可以返回你想要的Writable对象,这个工厂产生的Writable对象可能会用于某些ObjectWritable的readFileds()等方法中。
Writable实现类:
当然了,Writable有着自己一大堆的实现类:
AbstractCounters, org.apache.hadoop.security.token.delegation.AbstractDelegationTokenIdentifier,AbstractMapWritable,AccessControlList,AggregatedLogFormat.LogKey,AMRMTokenIdentifier,ArrayPrimitiveWritable,ArrayWritable,BloomFilter,BooleanWritable,BytesWritable,ByteWritable,ClientToAMTokenIdentifier,