2013-03-19 24 views
0

我想在運行hadoop作業時設置系統屬性(不是hadoop屬性)。我發現設置系統屬性並不容易。即使我設置在殼如何在hadoop中指定系統屬性,除了修改hadoop-env.sh?

export HADOOP_OPTS="$HADOOP_OPTS:-Dproperty=value" 

它仍然無法正常工作。 hadoop命令行的「-D」選項僅用於配置,而不是系統屬性。所以「-D」選項也不起作用

任何人有想法嗎?謝謝

+0

我們可以看到你正在使用啓動作業的命令?你是否使用'ToolRunner'或'GenericOptionsParser'? – Quetzalcoatl 2013-03-20 10:14:46

回答

5

爲什麼不直接使用在線-Dfoo.bar=example開始通過命令行工作時,就像這樣:

hadoop jar example.jar com.example.ExampleTool -Dfoo.bar=example argument

爲了獲得在代碼中的屬性,使用conf.get("foo.bar");


現在,如果您確實需要將其設置爲系統屬性,則可以使用您從Hadoop配置中獲得的值在代碼的開頭設置它,如下所示:

String property = conf.get("foo.bar"); 
System.setProperty("foo.bar", property); 
+1

原因是我正在使用需要獲取系統屬性的庫 – zjffdu 2013-03-21 00:38:17

+0

我明白了,我已經編輯了我對您的潛在解決方案的回答。 – Quetzalcoatl 2013-03-21 00:47:07

+0

謝謝,這應該適合我 – zjffdu 2013-03-21 04:41:11

0

檢查系統屬性和環境變量之間的區別以及如何設置它們here

+0

-D僅用於配置,它不會設置系統屬性 – zjffdu 2013-03-20 08:09:33

2

這樣

exec "$JAVA" $JAVA_HEAP_MAX $HADOOP_OPTS $CLASS "[email protected]" 

所以hadoop腳本調用Java類,我們可以通過全系統的特性是這樣的:

export HADOOP_OPTS="$HADOOP_OPTS -Dfoo=bar" 
相關問題