2012-11-06 88 views
1

我正在運行hadoop作業mapred.reduce.tasks = 100(只是試驗)。產生的地圖數量爲537,因爲這取決於輸入分割。問題是減速器並行運行的次數不會超過4.即使在映射100%完成之後。有沒有一種方法可以增加減速器的運行數量,因爲CPU使用率是次優的,Reduce速度非常慢。我也設置了mapred.tasktracker.reduce.tasks.maximum = 100。但這似乎並不影響並行運行的還原器數量。hadoop:reducer數量保持不變4

+0

我認爲數字「4」是集羣的「減少任務容量」。有沒有辦法增加這個? – chethan

+0

你正在使用什麼調度程序? –

+0

默認調度程序 – chethan

回答

0

事實證明,所有需要的是在更改mapred-site.xml之後重新啓動mapred和dfs守護進程。 mapred.tasktracker.reduce.tasks.maximum的確是要增加Reduce容量的正確參數。

不明白爲什麼hadoop在每次提交作業時都選擇不重新加載mapred-site

+0

僅供參考,您只需在編輯mapred-site.xml之後重新啓動mapred即可。重新啓動dfs是沒有必要的。 – sufinawaz

0

可以使用作業配置像下面具體說明減速器的數目:

job.setNumReduceTasks(6);

而且,當你執行你的罐子,你可以通過屬性象下面這樣:

-D mapred.reduce.tasks = 6

+0

我已經在mapred-site.xml中設置了mapred.reduce.tasks。但那不是我想要的。我想增加減速器的「容量」。 – chethan

+0

屬性mapred.reduce.tasks = 100值在此處不起作用。它取決於可用的CPU和I/O帶寬。您是否知道您擁有的CPU數量?如果沒有,請嘗試cat/proc/cpuinfo – Ramana

2

檢查是由分區程序使用的哈希碼;如果您的密鑰只返回4個哈希碼值,Hadoop將只安排4個減速器。

您可能需要實現自己的分區才能獲得更多的reducer,但是如果您的mapper只生成4個鍵,則4是reducer的最大數量。

+0

映射器產生大約200,000個密鑰。典型的映射器輸出將是<「www.xyz.com」,「http://www.xyz.com/page1」>。這是一個鍵值對。來自同一主機的所有網址都要去一個減速器。因此,如果我有多個Reducer同時運行,我可以同時處理來自多個主機的數據 – chethan