Hadoop-2.4.1学习之Writable及其实现

Posted skyWalker_ONLY

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hadoop-2.4.1学习之Writable及其实现相关的知识,希望对你有一定的参考价值。

      Hadoop基于DataInput和DataOutput实现了简单、高效的序列化协议,而Writable接口定义了Hadoop序列化的方法,MapReduce框架中的任何键值类型都实现了该接口,比如IntWritable、LongWritable等,详细的类关系见下图:


      通过上图可以发现,MapReduce中常用的键值类型都没有直接实现Writable接口,而是实现了该接口的子接口WritableComparable,该子接口还继承了Comparable接口,这意味着实现类除了可以序列化和发序列化外,还能够彼此进行比较,这是因为当这些类做为键在MapReduce中使用时,在排序阶段需要对其进行比较排序。但这并不是说如果实现自定义的序列化类时,必须实现WritableComparable接口,仅当自定义的序列化类也用作键时才必须实现该接口,如果仅是做为值使用的话,仅实现Writable接口即可。

      当自定义的序列化类用做键时,需要考虑到在根据键进行分区时经常用到hashCode()方法,因此需要确保该方法在不同的JVM实例中返回相同的结果,而Object对象中默认的hashCode()方法不能够满足该特性,所以在实现自定义类时需要重写hashCode()方法,而如果两个对象根据equals()方法是相等的,那么二者的hashCode()返回值也必须相同,因此在重写hashCode()的时候,有必要重写equals

以上是关于Hadoop-2.4.1学习之Writable及其实现的主要内容,如果未能解决你的问题,请参考以下文章

Hadoop-2.4.1学习之Streaming编程

Hadoop-2.4.1学习之怎样确定Mapper数量

Hadoop-2.4.1学习之高可用ResourceManager

Hadoop-2.4.1学习之FileSystem及实战

Hadoop-2.4.1学习之InputFormat及源代码分析

Hadoop-2.4.1学习之InputFormat及源代码分析