2013-10-08 25 views
1

我使用MultipleOutputs寫入三個文件,即名稱,attrib,其他和使用6 redcuers。 我在輸出目錄獲得這些文件:使用MultipleOutputs時Hadoop中的文件名是如何的?

attrib-r-00003 name-r-00004 part-r-00000 part-r-00002 part-r-00004 _SUCCESS 
_logs   other-r-00001 part-r-00001 part-r-00003 part-r-00005 

我的問題是,如何將這些文件命名(如爲什麼是-R-0003追加到ATTRIB文件,難道是任務0003編譯這個文件?)。我目前正在僞模式下運行Hadoop,在一個真正的集羣上是否需要合併文件(即,attrib是否具有diff異或文件)?另外,有沒有一種方法可以從我的輸出文件名中刪除-r-xxxxx?

P.S我對Hadoop的瞭解相當有限。

回答

1

MultipleOutputs允許您將數據寫入名稱來源於 輸出鍵和值的文件,或者實際上來自任意字符串。這允許每個縮減器(或映射器中的 )創建多個單個文件。文件名稱的形式 名稱 - 間NNNNN在地圖輸出和的名稱-R-NNNNN爲減少輸出,其中名稱是由程序設定的 任意名稱,和NNNNN是整數指定部分 數字,從零開始。部件號可確保從不同分區(映射器或縮減器)寫入的輸出在相同名稱的情況下不會發生碰撞。

是的,如果你想單個文件作爲輸出,你必須結合文件(即將attrib有不同文件的diff減少)。作業完成後,您可以合併文件。您可以查看此方法來追加文件。 public FSDataOutputStream append(Path f) throws IOException

相關問題