方法v Hadoop MapReduce中的类级变量

时间:2013-08-16 19:58:16

标签: performance hadoop mapreduce

这是关于地图缩减步骤中可写变量和分配的性能的问题。这是一个减速器:

static public class MyReducer extends Reducer<Text, Text, Text, Text> {
      @Override
      protected void reduce(Text key, Iterable<Text> values, Context context) {
        for (Text val : values) {
            context.write(key, new Text(val));
        }
      }
}

或者这是更好的表现方式:

static public class MyReducer extends Reducer<Text, Text, Text, Text> {
      private Text myText = new Text();
      @Override
      protected void reduce(Text key, Iterable<Text> values, Context context) {
        for (Text val : values) {
            myText.set(val);
            context.write(key, myText);
        }
      }
}

在Hadoop权威指南中,所有示例都是第一种形式,但我不确定这是用于较短的代码示例,还是因为它更具惯用性。

2 个答案:

答案 0 :(得分:1)

这本书可能会使用第一种形式,因为它更简洁。但是效率较低。对于大型输入文件,该方法将创建大量对象。这种过多的对象创建会降低您的性能。在性能方面,第二种方法更可取。

一些讨论此问题的参考资料:

答案 1 :(得分:0)

是的,如果reducer需要处理大量数据,那么第二种方法更可取。第一种方法,将继续创建引用并清理它取决于垃圾收集器。