mapred-site.xml不覆盖mapred-default.xml中的参数

时间:2014-01-08 13:21:14

标签: java hadoop configuration

我正在使用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的设置 - 但我怎么能找出它是什么?

1 个答案:

答案 0 :(得分:0)

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