我正在学习Hadoop MapReduce框架。我很难找到为什么我们不能在Map Reduce中使用Java原始数据类型。
答案 0 :(得分:3)
在Hadoop中,进程间通信是使用远程过程调用(RPC)构建的。 RPC协议使用序列化来呈现 将消息发送到发送方的二进制流中,它将从接收方的二进制流中反序列化为原始消息。
为了Hadoop的有效性,应优化序列化/反序列化过程,因为群集中的节点之间会发生大量远程调用。因此序列化格式应为fast, compact, extensible and interoperable
。由于这个原因,Hadoop框架提出了一个IO类来替换java原始数据类型。例如IntWritbale for int, LongWritable for long, Text for String etc.
有关更多详细信息,请参阅Hadoop权威指南第4版。
来自Apache website,可写的目的引用为:
一个可序列化的对象,它实现了一个基于DataInput和DataOutput的简单,高效的序列化协议。
答案 1 :(得分:3)
Java序列化要求类的哈希在序列化格式的对象的每个实例之前加上前缀。因此,要读取对象,您不需要指定类名。这会导致读取对象的开销,因为每个对象都可以是不同类的实例。
在Hadoop序列化中,我们在检索时指定类名。因此,不需要前缀,因为我们已经知道我们正在检索什么。因此我们设置了InputFormat。这可以在RPC期间提高各方面的速度和性能。