2013-06-18 3 views
0

Моя среда ubuntu12.04 + eclipse3.3.0 + hadoop0.20.2Почему System.setProperty не может изменить атрибут конфигурации в Hadoop?

Когда я тестирую 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")); 
} 

конф-1.xml выглядит следующим образом:

<configuration> 
    <property> 
     <name>z</name> 
     <value>mz</value> 
    </property> 
</configuration> 

выход:

mz 
mz 

Может кто-нибудь дать мне некоторую помощь? Большое спасибо!

ответ

3

Объект Configuration не связан с системой свойств - если вы хотите, чтобы изменить значение z в конфигурации, а затем использовать conf.set('z', 'SystemProp_mz') вместо System.setProperty(..)

Update

Объект конфигурации может используйте это расширение, как указано в 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"); 
} 
+0

Его можно установить 'System.setProperty' в ** Hadoop, Окончательное руководство 3-го **. См. ** Page 146 (Расширение переменной) **. – Judking

+0

Это правда, но тонким способом - ответьте соответствующим образом –