3.2 MapReduce API基本概念
在正式分析新旧API之前,先要介绍几个基本概念。这些概念贯穿于所有API之中,因此,有必要单独讲解。
3.2.1 序列化
序列化是指将结构化对象转为字节流以便于通过网络进行传输或写入持久存储的过程。反序列化指的是将字节流转为结构化对象的过程。在Hadoop MapReduce中,序列化的主要作用有两个:永久存储和进程间通信。
为了能够读取或者存储Java对象,MapReduce编程模型要求用户输入和输出数据中的key和value必须是可序列化的。在Hadoop MapReduce中,使一个Java对象可序列化的方法是让其对应的类实现Writable接口。但对于key而言,由于它是数据排序的关键字,因此还需要提供比较两个key对象的方法。为此,key对应类需实现WritableComparable接口,它的类如图3-3所示[1]。
图 3-3 序列化接口WritableComparable的类图
[1]关于Hadoop序列化的更详细介绍,可参考《Hadoop权威指南》的“第4章Hadoop I/O”。