2014-03-29 49 views
0

在我的公司開發人員竭盡全力不要在mappers/redurs中創建對象。例如,使用基本的avro記錄(使用位置),使用字節數組和流而不是對象等。mapreduce:我應該避免在mapper/reducer內創建對象嗎?

這聽起來對我來說就像過度優化。基於Java的服務器也需要高性能,但人們不會像這樣編程。

那麼什麼是正確的?

回答

1

我不認爲你可以說對或錯,但也許矯枉過正。你(可能)會犧牲可讀性和可維護性來提高性能。請記住,如果您的縮減器運行速度提高1秒,而您的作業使用100個節點進行縮減,則不會在100秒內完成,只有1個假設在開始時平均分配密鑰和可用資源。

我個人聲明類變量並在我的構造函數(see tip #6)中初始化它們。然後我設置它們而不是在映射器或減速器內創建新對象。這樣你只會招一次。您只需確保在地圖的開始處或清除方法中清除對象,以確保您不會從先前的調用中結轉。

相關問題