2012-07-16 24 views

回答

2

默认情况下,每个映射和reduce任务都运行在不同的JVM中,并且可以有多个JVM在节点上的任何特定实例上运行。

设置下列属性

mapred.job.reuse.jvm.num.tasks = -1
mapreduce.tasktracker.map.tasks.maximum = 1个
mapreduce.tasktracker.reduce.tasks 。最大= 1
mapreduce.job.reduce.slowstart.completedmaps = 1

和将只有一个单一的映射器/用JVM重用给定的节点上运行的减速机和减速器将不会启动,直到所有该映射器已完成处理。

几件事情要注意

  1. 以上方法适用于MapReduce的1X释放,是不是一种有效的方法

  2. MapReduce 2x版本不支持JVM重用。

0

你应该先知道你的工作是要在被运行的配置/模式。

举例来说,如果你在本地(独立)模式下运行,将只有一个JVM上运行你的工作。 如果您以伪分布模式运行它,则将使用您计算机上的多个JVM运行作业。 如果以分布模式运行它们,它们将运行在不同的机器上,当然还有不同的JVM(使用JVM重用)。

1

如果静态字段在map或reduce程序中动态更新,将会产生问题。独立和伪分布式模式适用于初学者,只能在学习Hadoop时使用。这些模式在处理大量数据(这是地图的主要目标 - 减少编程实践)时不会帮助。

当作业分布在节点上时,静态信息将会丢失。重新考虑使用静态变量。

如果可以的话,粘贴地图和减少程序以及需要静态字段,我们可以有相同的更好的解决方案。

相关问题