The key and value classes have to be serializable by the framework and hence need to implement
the Writable interface. Additionally, the key classes have to implement the WritableComparable
interface to facilitate sorting by the framework.
他们实现了自己的类text for string,longwritable for long,intwritable for integers。 添加这些类的目的是为优化的网络序列化定义它们自己的基本类型。这些可以在org.apache.hadoop.io包中找到。 这种类型生成一个紧凑的序列化对象,以充分利用网络带宽。而hadoop是用来处理大数据的,所以网络带宽是他们最想有效利用的宝贵资源。另外,对于这个类,与java的本机类型相比,它们减少了序列化和反序列化这些对象的开销。
3条答案
按热度按时间gab6jxml1#
为什么我不能使用基本的字符串或整数类?
整数和字符串实现了java的标准串行接口。问题是mapreduce序列化/反序列化值时没有使用这个标准接口,而是使用一个自己的接口(称为writable)。
以下是mapreduce教程的链接
m0rkklqb2#
冗余???
让我解释一下。当我们谈论分布式系统时,高效的序列化/反序列化起着至关重要的作用。它出现在分布式数据处理的两个截然不同的领域:
工控机
永久存储
具体到hadoop,节点之间的ipc是使用rpcs实现的。rpc协议使用序列化将消息呈现为二进制流以发送到远程节点,然后远程节点将二进制流反序列化为原始消息。因此,为了有效地存储和处理大量的数据,有一个可靠的序列化/反序列化框架是非常重要的。通常,rpc序列化格式最好是:
契约
快速的
可扩展的
可互操作
hadoop使用自己的类型,因为开发人员希望存储格式紧凑(以有效利用存储空间)、快速(因此读取或写入TB数据的开销最小)、可扩展(因此我们可以透明地读取以旧格式写入的数据),并且可以互操作(因此我们可以使用不同的语言读写持久数据)。
在认为拥有专用的mapreduce类型是多余的之前,请记住几点:
hadoop基于可写的序列化框架为mapreduce程序提供了比使用通用java的本机序列化框架更高效、更定制的数据序列化和表示。
与java的序列化相反,hadoop的可写框架不会在每个对象都希望序列化数据的所有客户机都知道序列化数据中使用的类型的情况下编写类型名。省略类型名可以加快序列化过程,并产生紧凑的、随机可访问的序列化数据格式,这些格式很容易被非java客户机解释。
hadoop基于可写的序列化还能够通过重用可写对象来减少对象创建开销,这在java的本机序列化框架中是不可能的。
hth公司
wnvonmuf3#
他们实现了自己的类text for string,longwritable for long,intwritable for integers。
添加这些类的目的是为优化的网络序列化定义它们自己的基本类型。这些可以在org.apache.hadoop.io包中找到。
这种类型生成一个紧凑的序列化对象,以充分利用网络带宽。而hadoop是用来处理大数据的,所以网络带宽是他们最想有效利用的宝贵资源。另外,对于这个类,与java的本机类型相比,它们减少了序列化和反序列化这些对象的开销。