Hadoop 分布式计算,序列化是Hadoop通过RPC调用,使得每个节点之间有效沟通的方法。
于是序列化就成为了分布式计算的一个重要课题。
序列化之后,对于分布式计算还需要排序。因此排序也相当重要:
Hadoop要求对象在序列化之后的字节也能够支持排序,以提高计算速度,还不必产生很多无谓的数据。
下面两张图记录了JAVA原生类型转化成序列化以后所占的字节数
Hadoop里关于Writeable 相关类 的继承树:
A,Text类相当于 java.lang.String,不同的是Text用的是UTF-8的编码来解析的。
也就是说在Indexing的时候会和String有不一样地方:
举例:
System.out.println(s.length())
输出为5
System.out.println(s.getLength())
输出为10
联系:
String 的charAt返回 char所在的第几个为止========== Text的find()方法与之效果一样
String 的 codePointAt 返回unicode地址 ========== Text 的charAt()返回 unicode 地址
举例:
String s = "\u0041\u00DF\u6771\uD801\uDC00";
assertThat(s.codePointAt(3), is(0x10400));
输出: true
Text s = "\u0041\u00DF\u6771\uD801\uDC00";
assertThat(t.charAt(6), is(0x10400));
输出: true (此输出与 String.codePointAt()效果一样)
B,NullWritable 单例