我最近看到了hadoop的mapred.job.reuse.jvm.num.tasks属性。默认情况下,它设置为+1,这意味着每个map / reduce任务都会启动一个新的JVM。相反,如果将其设置为-1,那么jvm可以由无限数量的任务使用。在这种情况下,任务一个接一个地串行执行,以便使用相同的JVM。
因此,当属性设置为每个节点启动的JVM数量等于任务数量时。没有混淆.... 但是,我的具体问题是,如果我将mapred.job.reuse.jvm.num.tasks设置为-1,每个节点将启动多少JVM。每个节点只有一个JVM吗?或其他什么?
答案 0 :(得分:1)
mapred.job.reuse.jvm.num.tasks属性用于设置单个作业的最大任务数,该任务将在单个JVM中执行。默认值为1.
来自不同作业的任务将始终在单独的JVM中运行。这仅适用于单个Job的任务。
因此,当您将此值设置为-1时,这表示作业的所有任务将在节点上运行相同的JVM,但是新作业将生成新的jvm以在节点上运行其任务。
Hadoop通常会在分叉的JVM中启动map或reduce任务。 JVM启动可能会产生很大的开销,尤其是在启动时 有数百或数千个任务的工作,大多数工作执行时间短。 重用允许JVM实例最多重复使用N次以执行相同的作业。
<property>
<name>mapred.job.reuse.jvm.num.tasks</name>
<value>10</value>
<description>How many tasks to run per jvm. If set to -1, there is no limit</description>
</property>
因此,此配置将为一个特定作业重复使用JVM实例10次。