Hadoop Text数据类型是可变的还是不可变的?

时间:2014-03-21 08:35:57

标签: java hadoop hadoop2

在mapreduce程序之一中,我在context.write期间使用new Text()

context.write(key, new Text(outputRecord.toDelimitedString("|")));

当我使用上述语句时,我想知道如何存储Text对象以及如何处理内存管理。还想知道在没有被任何对象引用之后存在对象值。

请让我知道这件事。

2 个答案:

答案 0 :(得分:1)

Hadoop中的Text不是不可变的。它不可能,因为Hadoop的序列化过程隐含地禁止不变性。

在这种特殊情况下,context.write只是将Text的内容序列化到调用内部的字节缓冲区中,因此Text对象将在方法返回后很快被删除。

请记住,Text对象在传递给方法时仍然存在堆栈引用,因此它不符合垃圾回收条件。

答案 1 :(得分:0)

如果您选中Hadoop Text源代码,则会回答您的所有问题。

  

此类使用标准UTF8编码存储文本。它提供了在字节级序列化,反序列化和比较文本的方法。长度类型为整数,并使用零压缩格式进行序列化。

     

此外,它还提供了字符串遍历的方法,而无需将字节数组转换为字符串。

     

还包括用于序列化/解析字符串,编码/解码字符串,检查字节数组是否包含有效UTF8代码,计算编码字符串长度的实用程序。

从源代码中可以看出,这个类是不可变的。

关于你的问题:

  

还想知道在没有被任何对象引用之后存在对象值

您需要了解JVM内存模型。