所以通常對於20個節點集羣提交作業處理3GB(200個分裂)的數據需要約30秒,實際執行約1m。 我想了解的是在作業提交過程中的瓶頸,並瞭解未來報價爲什麼提交工作到mapreduce需要這麼多時間在一般?
每MapReduce的開銷是顯著:開始/結束MapReduce工作耗費時間
有些過程我知道: 1.數據分割 2. jar文件共享
所以通常對於20個節點集羣提交作業處理3GB(200個分裂)的數據需要約30秒,實際執行約1m。 我想了解的是在作業提交過程中的瓶頸,並瞭解未來報價爲什麼提交工作到mapreduce需要這麼多時間在一般?
每MapReduce的開銷是顯著:開始/結束MapReduce工作耗費時間
有些過程我知道: 1.數據分割 2. jar文件共享
有幾件事情要了解有關HDFS和M/R,有助於理解這種延遲:
如果您要處理1000行內容的文件,那麼您最好使用普通的文件讀取和處理程序。 Hadoop基礎架構在分佈式系統上產生一個進程不會產生任何好處,但只會導致額外的開銷,包括定位包含相關數據塊的datanode,啓動其上的處理程序,跟蹤和收集結果。
現在將其擴展到100個Peta字節的數據,與處理它們所需的時間相比,這些開銷看起來完全不重要。處理器(映射器和縮減器)的並行化將在這裏顯示出優勢。
因此,在分析您的M/R的性能之前,您應該先考慮對您的羣集進行基準測試,以便更好地瞭解這些開銷。
在集羣上執行無操作map-reduce程序需要多長時間?
使用MRBench爲了這個目的:
運行此程序,請嘗試以下(檢查最新版本的正確方法:
hadoop jar /usr/lib/hadoop-0.20/hadoop-test.jar mrbench -numRuns 50
令人驚訝的對我們的開發集羣之一是是22秒。
另一個問題是文件大小。
如果文件大小小於HDFS塊大小,則Map/Reduce程序會產生大量開銷。 Hadoop通常會嘗試爲每個塊產生一個映射器。這意味着如果您有30個5KB文件,那麼即使文件大小很小,Hadoop最終可能每個塊最終產生30個映射器。這是一個真正的浪費,因爲與處理小型文件相比,每個程序開銷都很大。
當太多的小文件出現時,請看[小文件問題](http://www.cloudera.com/blog/2009/02/the-small-files-problem/)文章。 – 2012-07-07 03:30:24
是否可以將我自己的mapreduce作業jar文件用於mrbench? – 2015-06-18 08:36:20
據我所知,沒有一個瓶頸導致作業運行延遲;如果有的話,它會在很久以前解決。
有很多步驟需要時間,並且有些原因會導致過程緩慢。我會嘗試列出它們並估計我可以在哪裏:
我也有類似的問題,我能說出該解決方案在下面的步驟被打破:
嘗試與數據節點和節點名稱:
嘗試安裝在兩種情況下起作用的hadoop(hadoop 2.5.2)的較低版本,它在hit和trial中工作。
有多少文件組成3GB的數據? jobtracker使用多少地圖任務來運行這項工作? – 2012-07-06 21:40:21
@ yura:30秒或30分鐘? – FourOfAKind 2012-07-06 23:17:11
30秒和約300個映射器即分裂 – yura 2012-07-07 00:18:32