Map和Reduce是否在单独的JVM中运行?

时间:2012-07-16 03:50:24

标签: hadoop

嗨我有一个Map Reduce任务说AverageScoreCalculator有mapper和reducer。 问题是我静态初始化AverageScoreCalculator中的几个字段是否可以映射到mapper和reducer?

3 个答案:

答案 0 :(得分:2)

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

设置以下属性

  

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

并且在给定节点上只有一个mapper / reducer运行并且JVM重用,并且在所有映射器完成处理之前,reducers不会启动。

需要注意的事项

  1. 上述方法适用于MapReduce 1x版本,不是一种有效的方法

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

答案 1 :(得分:1)

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

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

如果可以,粘贴地图并减少程序和静态字段的需要,我们可以为此提供更好的解决方案。

答案 2 :(得分:0)

您应该首先知道您的工作将在哪个配置/模式下运行。

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