为什么我们不能在MapReduce中使用java原始数据类型?

lymnna71  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(320)

我正在学习hadoopmapreduce框架。我很难找到为什么我们不能在MapReduce中使用java原始数据类型。

mnowg1ta

mnowg1ta1#

在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网站上,可写的目的是:
基于数据输入和数据输出实现简单、高效的序列化协议的可序列化对象。

mnemlml8

mnemlml82#

java序列化要求在序列化格式的对象的每个示例前面加上类的哈希前缀。因此,要读取对象,不需要指定类名。这会导致读取对象的开销,因为每个对象都可以是不同类的示例。
在hadoop序列化中,我们在检索类名时指定类名。因此,不需要前缀,因为我们已经知道要检索的内容。因此我们设置输入格式。这在rpc的各个方面提高了速度和性能。

相关问题