hadoopmapreduce中的性能方法v类级变量

v64noz0r  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(290)

这是一个关于map reduce步骤中可写变量的性能和分配的问题。这是一个减速机:

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权威指南中,所有示例都是第一种形式,但我不确定这是针对较短的代码示例,还是因为它更惯用。

ikfrs5lh

ikfrs5lh1#

这本书可以使用第一种形式,因为它更简洁。然而,它的效率较低。对于大型输入文件,这种方法将创建大量对象。这种过度的对象创建会降低性能。就性能而言,第二种方法更可取。
讨论这个问题的一些参考文献:
提示7:,
关于hadoop对象重用,以及
这是吉拉。

dgiusagp

dgiusagp2#

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

相关问题