我有10個由mapreduce創建的文件。它們按LongInt鍵排序。我想將這些文件合併成單個文件。所以他們應該排序。將排序文件合併到hadoop中的單個排序文件中
我試過getmerge命令。但它沒用。因爲最終文件沒有排序。它僅將文件粘貼到單個文件中,而不需要任何排序那麼,解決方案是什麼?
回答
使用這個命令:
sort -mnr <src>
而且由於輸出數據量較大,您可以訪問這個sort command in linux
我有10個由mapreduce創建的文件。它們按LongInt鍵排序。我想將這些文件合併成單個文件。所以他們應該排序。將排序文件合併到hadoop中的單個排序文件中
我試過getmerge命令。但它沒用。因爲最終文件沒有排序。它僅將文件粘貼到單個文件中,而不需要任何排序那麼,解決方案是什麼?
回答
使用這個命令:
sort -mnr <src>
而且由於輸出數據量較大,您可以訪問這個sort command in linux
,獲取文件到本地計算機和排序是不是一個好選項。我認爲你應該寫下你自己的Partitioner
,它將密鑰分成非重疊的範圍。例如[0-1000] [1000-2000] .....
你可以按照如下步驟,執行你的MR作業後:
使用合併輸出內容如下命令:(多減速器可以使用 - 可擴展性不會受到影響)使用MR作業確實TotalSort
hadoop fs -cat [dir]/* | hadoop fs -put - [destination file]
合併的輸出(步驟2)使用:
hadoop -getmerge command or
hadoop fs -cat [dir]/* | hadoop fs -put - [destination file]
步驟2可以使用此代碼link
您可以合併文件,但合併後的文件將不能進行排序來實現。但是,您可以編寫map-reduce作業並將數據分類爲單個輸出。
我的意思是:
合併文件
hadoop fs -getmerge /output/dir/on/hdfs/esired/local/output/file.txt
或
給輸入目錄到一個Map-Reduce作業。它將文件合併爲上述命令。
編寫一個Map-Reduce作業來對數據進行排序。
爲什麼不能用1個reducer運行map reduce作業? –
因爲需要很多時間 – Amir