mapred-site.xml没有重写mapred-default.xml中的参数



我使用的是Hadoop 0.20.2版本(Cloudera发行版cdh3u6),发现了一些问题。据我所知,如果我在/etc/hadoop/conf/mapred-site.xml中设置了一个值,它应该会自动覆盖Hadoop默认值。所以我设置了一个变量如下:

<property>
<name>mapred.child.java.opts</name>
<value>-Xmx1024m</value>
</property>

然而,这没有任何效果。现在,我知道hadoop正在读取该文件,因为如果我将变量设置为final(<final>true</final>),则设置应用于我的作业。然而,据我所知,这应该没有必要,因为mapred-site.xml应该在mapred-default.xml之后加载,所以它应该简单地覆盖它

您可能会问,链中的其他内容是否也覆盖了mapred-site.xml中的设置?这是一个合乎逻辑的结论,但我找不到任何证据。我有一些作业配置文件,它们最终会出现在/var/log/hadoop中,并方便地说明它们的属性是从哪里加载的。所以我得到这样的值:

<property><!--Loaded from /var/hadoop/mapred/local/jobTracker/job_201401081300_0009.xml--><name>mapred.child.java.opts</name><value>-Xmx200m</value></property>

/var/hadoop/mapred/local/jobTracker下引用的作业"子配置"是短暂的,只有当作业正在运行时才存在,但从正在运行的作业中检查一个时,我发现以下内容:

<property><!--Loaded from mapred-default.xml--><name>mapred.child.java.opts</name><value>-Xmx200m</value></property>

既然最终的作业配置似乎只是从mapred-default.xml加载的——那么为什么mapred-site.xml的值不会覆盖它呢?

虽然设置final可以解决问题,但我想了解在这种情况下发生了什么,因为它可能指示其他问题。此外,这会生成一个警告:WARN org.apache.hadoop.conf.Configuration: /var/hadoop/mapred/local/jobTracker/job_201401081300_0009.xml: a attempt to override final parameter: mapred.child.java.opts; Ignoring.。这个警告表明,链下游的另一个配置解析器确实覆盖了mapred-site.xml中的设置——但我怎么才能知道它是什么呢?

我遇到了这个问题,但在重新启动服务(hadoop-syarn resourcemanager,hadoop-siarn nodemanager)后,它从mapred-site.xml 中获取了值

最新更新