我的环境是ubuntu12.04 + eclipse3.3.0 + hadoop0.20.2
当我在System.serProperty上测试时,它将更改xml文件中定义的配置。但是当我测试它时,我不会得到同样的效果。这是我的代码片段:
//cofiguration class test
public static void test() {
Configuration conf = new Configuration();
conf.addResource("raw/conf-1.xml");
System.out.println(conf.get("z"));
System.setProperty("z", "SystemProp_mz");
System.out.println(conf.get("z"));
}
conf-1.xml如下:
<configuration>
<property>
<name>z</name>
<value>mz</value>
</property>
</configuration>
输出是:
mz
mz
有人能给我一些帮助吗?非常感谢!
答案 0 :(得分:3)
Configuration
对象未链接到系统属性 - 如果要更改配置中z
的值,请使用conf.set('z', 'SystemProp_mz')
代替System.setProperty(..)
<强>更新强>
Configuration对象可以使用http://hadoop.apache.org/docs/current/api/org/apache/hadoop/conf/Configuration.html中概述的变量扩展,但这需要您按如下方式定义条目:
<configuration>
<property>
<name>z</name>
<value>${z}</value>
</property>
</configuration>
如果您没有上述条目,则只需调用conf.get("z")
即不会解析为系统属性。以下单元测试块演示了这一点:
@Test
public void testConfSystemProps() {
System.setProperty("sysProp", "value");
Configuration conf = new Configuration();
conf.set("prop", "${sysProp}");
Assert.assertNull(conf.get("sysProp"));
Assert.assertEquals(conf.get("prop"), "value");
}