嗨,我有一个Map Reduce任务,比如AverageScoreCalculator,它有映射器和reducer。问题是,我在AverageScoreCalculator中静态初始化了几个字段,这对映射器和减法器都是可用的吗?
发布于 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重用的给定节点上将只运行一个映射器/缩减程序,并且在所有映射器都完成处理之前,缩减程序不会启动。
需要注意的几件事
2x发行版中不受支持。
发布于 2012-07-16 17:05:39
如果静态字段在map或reduce程序中动态更新,将会产生问题。单机版和伪分布式模式适用于初学者,仅当您正在学习Hadoop时才应使用。这些模式对处理大量数据没有帮助,而这正是map - reduce编程实践的主要目标。
当作业分布在节点上时,静态信息将丢失。重新考虑使用静态变量。
如果可以,粘贴map和reduce程序并需要静态字段,我们可以有一个更好的解决方案。
发布于 2012-07-16 15:45:20
您应该首先知道您的作业将在哪种配置/模式下运行。
例如,如果您在本地(独立)模式下运行,那么将只有一个JVM运行您的作业。如果您在伪分布式模式下运行该作业,那么该作业将在您的机器上使用多个JVM运行。如果在分布式模式下运行,它们将在不同的机器上运行,当然也会在不同的JVM上运行(使用JVM重用)
https://stackoverflow.com/questions/11497886
复制相似问题