2011-09-19 16 views
0

我正在爲MapReduce編寫一個索引應用程序。 我能夠用NLineInputFormat分割輸入,現在我的應用程序中有幾百個映射器。然而,只有2/mashine在同一時間是活躍的,其餘的是「PENDING」。我相信這樣的行爲會顯着降低應用程序的速度。如何判斷MapReduce同時使用多少個mapper?

我該如何讓hadoop在每臺機器上同時運行至少100個?

我使用舊的hadoop api語法。這是我迄今爲止所嘗試的:

conf.setNumMapTasks(1000); 
    conf.setNumTasksToExecutePerJvm(500); 

這些都沒有任何效果。

任何想法如何讓映射器實際上並行運行?

+0

如何使用實際上是輸入行1/100的n行呢?爲什麼不使用Hadoop的文件大小分割? –

+0

現在我處於測試模式,在輸入文件中只有5000行。如果我使用hadoop的分裂,它會用一個映射器執行它。就我而言,這不是一個理想的行爲。即使在最終情況下,輸入文件的大小爲3.5 GB,hadoop的默認段大小爲64-128 MB,也會導致映射程序太少,從而無法實現應用程序的最佳性能。映射器花費大部分時間等待網站的響應 –

+0

您在羣集上有多少個節點?請記住,默認情況下,任務佔用200MB的內存。如果您期望在節點上運行大量任務,則會遇到OutOfMemoryErrors。同時請記住,設置任務有一定的開銷。更多的任務並不一定意味着更好的性能。 – salexander

回答

2

JobConf.setNumMapTasks()只是提示MR框架,我不確定調用它的效果。在您的情況下,整個作業中的地圖任務總數應該等於輸入中的總行數除以NLineInputFormat中配置的行數。您可以在整個作業中找到有關地圖/減少任務總數的更多詳情here

mapred.tasktracker.map.tasks.maximum描述說

,將同時由任務跟蹤器上運行的地圖任務的最大數量。

您需要配置mapred.tasktracker.map.tasks.maximum(這是默認爲2)改變地圖的任務數量由任務跟蹤器在特定節點上運行的平行。我無法獲得0.20.2的文檔,因此我不確定該參數是否存在,或者是否在0.20.2版本中使用了相同的參數名稱。

+0

不,這個不會改變同時活動的映射任務的數量 –

+0

正如我所提到的,我現在無法訪問0.20.2代碼。檢查TTConfig.java和TaskTracker.java並查找TT_MAP_SLOTS。正如有人所說,如果想要獲得Hadoop的HD(高清)視圖,最好的選擇是代碼:) –

相關問題