2014-01-14 63 views
2

我有10個由mapreduce創建的文件。它們按LongInt鍵排序。我想將這些文件合併成單個文件。所以他們應該排序。將排序文件合併到hadoop中的單個排序文件中

我試過getmerge命令。但它沒用。因爲最終文件沒有排序。它僅將文件粘貼到單個文件中,而不需要任何排序那麼,解決方案是什麼?

回答

使用這個命令:

sort -mnr <src> 

而且由於輸出數據量較大,您可以訪問這個sort command in linux

+0

爲什麼不能用1個reducer運行map reduce作業? –

+0

因爲需要很多時間 – Amir

回答

0

,獲取文件到本地計算機和排序是不是一個好選項。我認爲你應該寫下你自己的Partitioner,它將密鑰分成非重疊的範圍。例如[0-1000] [1000-2000] .....

0

你可以按照如下步驟,執行你的MR作業後:

  1. 使用合併輸出內容如下命令:(多減速器可以使用 - 可擴展性不會受到影響)使用MR作業確實TotalSort

    hadoop fs -cat [dir]/* | hadoop fs -put - [destination file] 
    
  2. 排序(步驟1)的輸出
  3. 合併的輸出(步驟2)使用:

    hadoop -getmerge command or 
    hadoop fs -cat [dir]/* | hadoop fs -put - [destination file] 
    

步驟2可以使用此代碼link

0

您可以合併文件,但合併後的文件將不能進行排序來實現。但是,您可以編寫map-reduce作業並將數據分類爲單個輸出。

我的意思是:

  1. 合併文件

    hadoop fs -getmerge /output/dir/on/hdfs/esired/local/output/file.txt

    給輸入目錄到一個Map-Reduce作業。它將文件合併爲上述命令。

  2. 編寫一個Map-Reduce作業來對數據進行排序。