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 に答える