首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Map和Reduce在不同的JVM中运行吗?

Map和Reduce在不同的JVM中运行吗?
EN

Stack Overflow用户
提问于 2012-07-16 11:50:24
回答 3查看 3.5K关注 0票数 3

嗨,我有一个Map Reduce任务,比如AverageScoreCalculator,它有映射器和reducer。问题是,我在AverageScoreCalculator中静态初始化了几个字段,这对映射器和减法器都是可用的吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-16 12:51:37

默认情况下,每个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

而且,在使用JVM重用的给定节点上将只运行一个映射器/缩减程序,并且在所有映射器都完成处理之前,缩减程序不会启动。

需要注意的几件事

  1. 以上方法适用于MapReduce 1x发行版,但不是一种有效的MapReduce重用在

2x发行版中不受支持。

票数 3
EN

Stack Overflow用户

发布于 2012-07-16 17:05:39

如果静态字段在map或reduce程序中动态更新,将会产生问题。单机版和伪分布式模式适用于初学者,仅当您正在学习Hadoop时才应使用。这些模式对处理大量数据没有帮助,而这正是map - reduce编程实践的主要目标。

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

如果可以,粘贴map和reduce程序并需要静态字段,我们可以有一个更好的解决方案。

票数 1
EN

Stack Overflow用户

发布于 2012-07-16 15:45:20

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

例如,如果您在本地(独立)模式下运行,那么将只有一个JVM运行您的作业。如果您在伪分布式模式下运行该作业,那么该作业将在您的机器上使用多个JVM运行。如果在分布式模式下运行,它们将在不同的机器上运行,当然也会在不同的JVM上运行(使用JVM重用)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11497886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档