2012-09-16 162 views

回答

1

修改Mapper類以過濾輸入將會更加準確,因爲不能保證組合器的執行,Hadoop可能會也可能不會執行組合器。此外,如果需要,它可能會執行多次。因此,您的MapReduce作業不應依賴於組合器的執行。

+0

我在我的mapper中使用TextInputFormat,它每次只讀一行。我想標記一個文件,如果在某行中發現了某種模式...但是因爲所有的map任務都是並行運行的,所以我無法知道某個文件是否被「標記」,直到所有行被掃描。這是我堅持的地方。 –

+0

你在使用合成器的觀點是爲什麼我沒有在我的答案中提到這些。我想我應該明確地說過。 – highlycaffeinated

1

浮現在腦海中一對夫婦的選擇:

  • 修改您的映射不輸出要篩選
  • 編寫過濾掉你不想要的值減速的值,飼料該減速器的輸出到另一個MapReduce作業

使用組合器不是此任務的好選擇,因爲@ 100gods提到,組合器執行不能保證。

+2

如果他無法更改映射器的代碼,他也可以使用Combiners過濾出這些值。 –

+0

謝謝你們兩位!合併器似乎是更好的選擇,因爲我無法更改映射器代碼。 –

+0

合併器?這個選項不正確。不能保證組合器代碼能夠執行。如上所述,最好的選擇是「不發出你需要濾除的關鍵值對」。 –