2011-09-23 67 views
1

目前我正在嘗試通過命令行參數傳遞一些值,然後使用GenericOptionsParser使用工具實現來解析它。更改Hadoop從節點上的默認配置?

從主節點我運行是這樣的:

bin/hadoop jar MYJAR.jar MYJOB -D mapred.reduce.tasks=13 

但這隻能獲得主服務器上的應用!有什麼方法可以將它應用到從屬設備上嗎?

我使用Hadoop 0.20.203。

任何幫助表示讚賞。

回答

3

但是,這隻適用於主!有什麼方法可以將它應用到從屬設備上嗎?

根據"Hadoop : The Definitive Guide"。在客戶端設置一些屬性是沒有用的。您需要在配置文件中設置相同的值。請注意,您也可以在配置文件中創建新屬性,並使用配置對象在代碼中讀取它們。

請注意,某些屬性在客戶端配置中設置時不起作用。對於 示例,如果在作業提交中將mapred.tasktracker.map.tasks.maximum設置爲 ,那麼期望它會更改執行作業的任務管理器的任務槽的數量,那麼您會感到失望,因爲只有此屬性如果在tasktracker的mapred-site.html文件中設置,則只能使用 。一般來說,你可以告訴組件 屬性應該在哪裏設置它的名字,所以mapred.task.tracker.map.tasks.maximum以mapred.tasktracker開頭的事實給你一個線索,它只能爲tasktracker守護進程。然而,這不是一條硬性規定,所以在某些情況下,您可能需要嘗試進行反覆試驗,甚至是閱讀資料來源。

您還可以使用conf/hadoop-env.sh文件中的HADOOP_*_OPTS來配置Hadoop變量的環境。

再次根據"Hadoop : The Definitive Guide"

不要混淆設定使用-Dproperty =值選項java命令JVM系統屬性設定使用-D屬性=值選項GenericOptionsParser(和ToolRunner)Hadoop的性質。 JVM系統屬性的語法不允許D和屬性名稱之間有任何空格,而GenericOptionsParser要求它們之間用空格分隔。

JVM系統屬性從java.lang.System類中檢索,而Hadoop屬性只能從Configuration對象中訪問。

+0

謝謝Praveen,所以我想我必須手動編輯所有文件。可以將Hadoop放入共享文件夾嗎?在這種情況下我應該關心什麼?我在我的局域網中有一個共享文件夾,我會嘗試使用它.. – Ahmed

+1

我還沒有嘗試過。但是,我認爲您應該能夠將配置文件放在共享文件夾中,並將該文件夾安裝在所有從服務器上。不知道,它的效率如何。 –