這裏記錄的數量是用例:極限的所有減速器產生的統稱
輸入URL由地圖讀和以後出射後的一些過濾。然後分區器根據主機名對它們進行分區。
運行map-reduce作業後,我對輸出url有一個全侷限制。我平均分配所有減速器。 即。如果全侷限製爲1000,並且reducer的數量是5,那麼每個reducer最多會發送(1000/5 = 200)url作爲輸出
問題是,如果只有2個主機的urls(由於用戶輸入),並且這兩個主機中的每個主機都有10萬個URL,處理這些URL(同一主機,同一分區)的2個reducer將限制每個URL只輸出200個URL。 其他縮減器由於分區而沒有獲取任何數據進行處理,併發出0條記錄。
因此,即使我有100000個URL /主機和全侷限製爲1000,輸出只有400個URL(200個URL /主機)。
我必須按主機名進行分區,因爲來自同一主機的URL會分組在一起並簡化更多邏輯。清理功能是hadoop map-reduce流程的一部分還是您提出的機制?請詳細說明一下。 – 2012-04-05 17:41:39
你可以在你的reducer類中覆蓋這個函數。在reduce函數中,您應該將記錄存儲在容器中而不是寫出來。在清理功能中,您可以進行通信並確定當前減速器需要寫出多少條記錄。在下面的頁面中查找清理函數int eh:http://hadoop.apache.org/common/docs/r0.20.2/api/org/apache/hadoop/mapreduce/Mapper.html – root1982 2012-04-08 02:41:06