Hadoop Text类

时间:2014-03-21 04:16:37

标签: hadoop

我想问为什么实现MapReduce分布式编程范例的Hadoop Framework在Java已经实现了我们使用的字符串时使用Text类来存储String?这看起来不必要多余(笑)。

http://hadoop.apache.org/docs/current/api/org/apache/hadoop/io/Text.html

3 个答案:

答案 0 :(得分:4)

他们已经实现了自己的类Text for String,LongWritable for Long,IntWritable for Integers。

添加这些类的目的是为优化的网络序列化定义自己的基本类型。这些可以在org.apache.hadoop.io包中找到。

此类型生成紧凑的序列化对象,以充分利用网络带宽。 Hadoop旨在处理大数据,因此网络带宽是他们想要以非常有效的方式使用的最宝贵的资源。此外,与Java的本机类型相比,它们减少了这些对象的序列化和反序列化的开销。

答案 1 :(得分:1)

冗余???

让我说清楚。当我们谈论分布式系统时,高效的序列化/反序列化起着至关重要的作用。它出现在两个截然不同的分布式数据处理领域:

  • IPC
  • 持久存储

要特定于Hadoop,节点之间的IPC是使用RPC实现的。 RPC协议使用序列化将消息呈现为要发送到远程节点的二进制流,然后将二进制流反序列化为原始消息。因此,拥有一个可靠的序列化/反序列化框架以便有效地存储和处理大量数据非常重要。通常,RPC序列化格式最好是:

  • 紧凑
  • 扩展
  • 可互操作的

Hadoop使用自己的类型,因为开发人员希望存储格式紧凑(以便有效利用存储空间),快速(因此读取或写入的开销数TB的数据是最小的,可扩展的(因此我们可以透明地读取以旧格式编写的数据)和可互操作(因此我们可以使用不同的语言读取或写入持久数据) )。

在认为拥有专用的MapReduce类型是多余的之前,要记住几点:

  1. 与使用通用Java的本机序列化框架相比,Hadoop基于Writable的序列化框架为MapReduce程序提供了更高效和自定义的序列化和数据表示。
  2. 与Java的序列化相反,Hadoop的Writable框架不会写入类型名称,每个对象都希望序列化数据的所有客户端都知道序列化数据中使用的类型。省略类型名称可以使序列化过程更快,并生成紧凑,随机可访问的序列化数据格式,非Java客户端可以轻松解释这些格式。
  3. Hadoop基于Writable的序列化还能够通过重用Writable对象来减少对象创建开销,这是Java本机序列化框架无法实现的。
  4. HTH

答案 2 :(得分:0)

为什么我不能使用基本的String或Integer类?

Integer和String实现Java的标准Serializable接口。问题是MapReduce序列化/反序列化不使用此标准接口的值,而是自己的接口,称为可写接口。

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. 

以下是MapReduce Tutorial

的链接