我正在爲MapReduce編寫一個索引應用程序。 我能夠用NLineInputFormat分割輸入,現在我的應用程序中有幾百個映射器。然而,只有2/mashine在同一時間是活躍的,其餘的是「PENDING」。我相信這樣的行爲會顯着降低應用程序的速度。如何判斷MapReduce同時使用多少個mapper?
我該如何讓hadoop在每臺機器上同時運行至少100個?
我使用舊的hadoop api語法。這是我迄今爲止所嘗試的:
conf.setNumMapTasks(1000);
conf.setNumTasksToExecutePerJvm(500);
這些都沒有任何效果。
任何想法如何讓映射器實際上並行運行?
如何使用實際上是輸入行1/100的n行呢?爲什麼不使用Hadoop的文件大小分割? –
現在我處於測試模式,在輸入文件中只有5000行。如果我使用hadoop的分裂,它會用一個映射器執行它。就我而言,這不是一個理想的行爲。即使在最終情況下,輸入文件的大小爲3.5 GB,hadoop的默認段大小爲64-128 MB,也會導致映射程序太少,從而無法實現應用程序的最佳性能。映射器花費大部分時間等待網站的響應 –
您在羣集上有多少個節點?請記住,默認情況下,任務佔用200MB的內存。如果您期望在節點上運行大量任務,則會遇到OutOfMemoryErrors。同時請記住,設置任務有一定的開銷。更多的任務並不一定意味着更好的性能。 – salexander