2012-05-14 58 views
1

我將合併一些使用map/reduce的同一目錄下的小文件。我看到有人說使用流將會非常簡單,但現在我只能使用JAVA map/reduce。 現在我的解決方案是讀取一個記錄一個記錄的文件,並將它們寫入相同的輸出文件。但我認爲效率低下。我可以使用整個文件的內容作爲映射器的值,以便提高I/O效率? 感謝您的回覆!如何使用mapreduce合併一些文件?

+0

合併順序對您有影響嗎?這些文件是從以前的MR作業輸出的,並且您想要創建一個單獨的排序輸出,還是隻想要一個文件,而且具有未定義的排序? –

+0

而且這些文件是否已經在HDFS中或某些本地磁盤上? –

+0

我不需要該命令,並且所有文件都在HDFS中 – wanghao

回答

3

這樣的「低效率」的方式就是貓的文件,它寫回:

hadoop fs -cat /path/to/files/*.txt | hadoop fs -put - /output/path/blobbed.txt 

您可能會發現,這將只是罰款甚至更大的數據集。

+1

它並不低效,但比通過mapreduce作業並行執行要慢。取決於有多少小文件,它可能比MR作業更快。 –

+0

您是否認爲'getmerge',然後將結果往後推得更快? –

+0

這取決於大小和有多少文件。但是每個文件最多可達64m getmerge應該更快。 –

相關問題