0

我的环境是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

谁能给我一些帮助?非常感谢!

4

1 回答 1

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");
}
于 2013-06-18T10:43:24.407 回答