gpt4 book ai didi

hadoop - 在 mapreduce 中重用可写对象

转载 作者:可可西里 更新时间:2023-11-01 14:23:34 28 4
gpt4 key购买 nike

我正在尝试找出重用可写对象与在 wordcount mapreduce 程序中创建新对象相比的性能优势。然而,无论输入数据有多大,这两个版本几乎需要相同的时间来完成。

我还尝试通过更改为任务提供较低的堆空间,

<property>
<name>mapred.child.java.opts</name>
<value>-Xmx120m</value>
</property>

但是与更高的堆空间相比,这两个版本的运行速度都稍慢。我永远无法获得重用可写对象以更好地执行的程序。我在这里遗漏了什么吗?

我修改过的wordcount部分,

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

最佳答案

这不是什么大问题,原因有二:

  1. 您执行的 IO,因此为每个输入行创建一些新对象并让它被垃圾收集并不是什么大问题。
  2. 最有可能的是,您的内存占用量很低。所以如果你创建对象,只要超过一定的内存阈值,它们就会存储在堆内存中。因此,您的其他解决方案很可能比其他解决方案占用更多的堆内存。如果您现在降低堆内存,垃圾收集器 必须更频繁地运行,因为超过阈值的频率更高。如果您打开它,您会在 GC 日志中看到它。

另一个原因可能是您测量时间的方式,Map task 在后面涉及大量的 RPC 通信,因此您不能总是 100% 确定您的数据不是不受网络拥塞或其他环境影响的影响。

关于hadoop - 在 mapreduce 中重用可写对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14063212/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com