我正在使用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-yarn-resourcemanager,hadoop-yarn-nodemanager)之后,它从mapred-site.xml中获取了值
关于java - mapred-site.xml不会覆盖mapred-default.xml中的参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20996895/