2014-04-22 37 views
3

目前,我知道jobtracker可以顯示每個地圖任務花費的時間,但我想要的不是每個地圖任務,而是它的時間從集羣中的第一個地圖任務開始直到最後一個一個節點。 例如:1個地圖需要2秒,但是如何測量每個節點有100個地圖任務時的時間,而不是全部都可以並行執行?測量Hadoop中每個節點的整個地圖階段的持續時間

是否有可能知道每個節點執行整個映射階段(所有映射任務)所需的時間?

回答

5

您可以使用用戶定義的Java計數器來導出每個節點所有映射器所用的時間。

在Mapper實現中,您需要執行以下操作: 1.覆蓋設置並記錄開始時間。 long startTime = System.currentTimeMillis(); 2.覆蓋清理方法

long endTime = System.currentTimeMillis(); String hostname = java.net.InetAddress.getLocalHost().getHostName(). context.getCounters(hostname,"time consumed").increment(endTime - startTime);

+0

感謝Pradyumna,我想你的代碼,但在背景部分的錯誤,它說:背景不能得到解決,或者不是一個領域。 你知道它可能是什麼原因,還是我需要導入一個額外的包或什麼? –

+0

我指的是地圖方法中的第三個參數。 保護無效的地圖(LongWritable鍵,Textvalue, 上下文環境) –

+0

這是工作完美Pradyumna,非常感謝你!只是在getHostName()的末尾而不是「」。是一個「;」 –

相關問題