2016-03-08 130 views
1

我無法訪問Hadoop Tool實現的命令行配置參數。Hadoop命令行配置不覆蓋默認值?

我正在與該命令而執行:hadoop jar <jar> <mainclass> -D SomeProperty=NewValue

run(String[] args)方法開始:

Configuration configuration = this.getConf(); 
configuration.set("SomeProperty", "DefaultValue"); 
Options options = new Options(); 
GenericOptionsParser parser = new GenericOptionsParser(configuration, options, args); 
args = parser.getRemainingArgs(); 

if (configuration.get("SomeProperty").equals("DefaultValue")) 
    return 1; //Will always return here unless the default value is overridden 

屬性SomeProperty從未被設置爲NewValue。沒有默認值的新屬性在配置中設置得很好,所以看起來好像問題是命令行參數不覆蓋默認配置值。

這是怎麼發生的?我可以改變這種行爲嗎?

編輯:爲了澄清,如果我調用與hadoop jar <jar> <mainclass> -D SomeProperty=NewValue -D SecondProperty=OtherValue jar命令,比SecondProperty將在配置適當設定,SomeProperty不會和兩者之間的唯一不同的是所使用的GenericOptionsParser當配置具有已稱爲set("SomeProperty", "DefaultValue")

+0

你給-D和屬性名稱之間的空格嗎?您不應在-D和參數名稱之間輸入空格。發佈確切的命令名稱和您輸入的值 –

+0

Ravindra,可以在新版Hadoop版本的命令行中設置屬性。問題是關於GenericOptionsParser的行爲,它無法覆蓋之前通過set()定義的屬性。 – Suriname0

回答

0

這是我對ToolRunner責任的誤解。

的文檔說明(重點煤礦):

運行由Tool.run給定的工具(字符串[]),與給定的通用參數解析之後。使用給定的配置,或者如果爲null則構建一個配置。使用conf的可能修改版本設置工具的配置。

我錯誤地認爲使用通用選項解析器是Tool的責任。