我有一個Hadoop MapReduce作業,分割不同種類的文檔(地方,人員,組織,算法等)。對於每個文檔,我都有一個標籤,用於標識文檔的類型以及指向其他文檔的鏈接,但是我不知道該鏈接的文檔是哪種類型,直到該任務中鏈接的頁面到達。MapReduce過濾器之前減少
在Map階段中,我確定當前頁面的鏈接和種類,然後將Emmit作爲鏈接和當前文檔的信息以及他的標記到單個還原器,Key NullWritable Value「CurrentDoc :: Type ::鏈接」。
在縮減階段,它使用值的「CurrentDoc :: Type」按類型對所有文檔進行分組,然後發出僅屬於某些類型的「Document :: Link」之間的關係。
但是我有一個內存問題,因爲所有的最後一步只在一個reducer中執行。
這是一種在映射過程之後和減少任務之前執行分組任務以標識具有其標籤的所有文檔然後將其分發到不同的縮減器的方法。
我的意思是在ArrayWritable文本中將所有文檔/標記分組爲「CurrentDoc :: Type」。然後發送到reducers作爲「CurrentDoc :: Link」元組的關鍵字,並且值ArrayWritable以並行方式在reduce階段執行一些過濾。
感謝您的幫助!
待辦事項接收到用於密鑰數據你使用組合函數?似乎在這裏很合適。 –
Hi @ JackDaniel的,我讀過關於組合器,問題是組合器只處理一個映射器的數據,不能處理所有映射器的數據,這就是我需要的。感謝您的評論 – sebsasto
只需嘗試發送「CurrentDoc :: Link」作爲鍵和「CurrentDoc :: Type」作爲映射器本身的值。 – madhu