Hadoop和重复使用的可变可写字段

这是从Apache教程发布的单词计数作业的实现的摘录

public static class TokenizerMapper  extends Mapper<Object,Text,IntWritable>{
    private final static IntWritable one = new IntWritable(1);
    private Text word = new Text();

    public void map(Object key,Text value,Context context
    ) throws IOException,InterruptedException {
        StringTokenizer itr = new StringTokenizer(value.toString());
        while (itr.hasMoreTokens()) {
            word.set(itr.nextToken());
            context.write(word,one);
        }
    }
}

重用Text word字段有什么好处?

我已经在许多Hadoop程序中看到了这一点,它是此类的实例化,以至于重用可以提高性能。如果不是这样,为什么人们会这么做,而不是像context.write(new Text(itr.nextToken()),one);

poilkjm 回答:Hadoop和重复使用的可变可写字段

您是正确的,因为Text对象的实例化并不繁重。但是,如果您要处理数十亿条记录,那么您希望将每条记录的每一毫微秒剃光。每次创建一个新的Text对象时,Java都必须为其分配内存,跟踪它,然后在某个时候进行垃圾回收。这次确实可以增加很多工作。

本文链接:https://www.f2er.com/3149141.html

大家都在问