WritableComparable接口相当于继承了上述两个接口的新接口 :

Public interface WritableComparable<T>extends Writable,Comparable<T>

Writable接口:

基于DataInputDatOutput的简单高效可序列化接口,就是org.apache.hadoop.io.Writable接口。

 几乎所有的hadoop可序列化对象都必须实现这个接口有2个方法:

 WritereadFiles。

WritableComparable接口:

类似javaComparable接口,用于类型的比较。MR其中一个阶段叫排序,默认使用Key来排序。Hadoop提供了一个优化接口RawComparator

 Public interface RawComparator<T> extends Comparator<T>{

  Public int compare(byte[]  b1,int s1,int l1,byte[] b2,int s2,int l2);

}

可以比较b1b2,允许执行者直接比较数据流记录,而无须先把数据流反序列化成对象,这样可以避免新建对象的开销 。

Writable

ArrayWritable                  

TwoDArrayWritable

MapWritable

SortedMapWritable

BooleanWritable

ByteWritable

IntWritable

VIntWritable

FloatWritable

LongWritable

VLongWritable

DoubleWritable

NullWritable

Text

BytesWritable

MD5Hash

ObjectWrtiable

GenericWritable

Text

  存储的数据按照UTF-8,类似String,它提供了序列化,反序列化和字节级别比较的方法。Text类替换了UTF8类。 1.unicode编码是一个很大的集合,可以容纳100多万个符号。具体的符号对应表可以查询unicode.org 它只规定了符号的二进制代码,没有规定如何存储,而utf-8就是unicode的实现还有utf16等。对于单个字符字节第一位为0,后面7位为这个符号的unicode码。因此对于英语字母,utf-8编码和ASCII码是相同的。所有\u0001~\u007f会以单字节储存。\u0080~\u07ff的unicode会以双字节储存,\u0800~\uFFFF的会以3字节存储。

 

posted on 2018-01-26 20:37  NightRaven  阅读(188)  评论(0编辑  收藏  举报