2014-09-02 45 views
2

我希望在每次通過在文件名末尾追加時間戳記來運行作業時,將地圖縮減程序的輸出文件添加到同一目錄。將輸出文件添加到Mapreduce中的現有輸出目錄

目前我能夠在文件輸出文件的末尾添加時間戳,但我無法找到如何將文件添加到同一個輸出目錄而不是每次覆蓋它。

回答

2

您可以將輸出文件寫入臨時文件夾,並在作業結束後將其移至目標文件夾。從一個文件夾移動所有文件到另一個方法的例子:

public static void moveFiles(Path from, Path to, Configuration conf) throws IOException { 
    FileSystem fs = from.getFileSystem(conf); // get file system 
    for (FileStatus status : fs.listStatus(from)) { // list all files in 'from' folder 
     Path file = status.getPath(); // get path to file in 'from' folder 
     Path dst = new Path(to, file.getName()); // create new file name 
     fs.rename(file, dst); // move file from 'from' folder to 'to' folder 
    } 
} 
+0

目前我下面什麼都你提到使用Fileutil.copy相同的邏輯,但問題是,它正在改變時間戳以前生成的文件也是因爲複製,我想保留以前生成的文件的時間戳。 – 2014-09-02 13:30:43

+0

據我所知,你只需將新文件複製到目標文件夾即可。爲什麼它會更改以前生成的文件的時間戳? – 2014-09-02 14:27:07

+0

Fileutil.copy將文件從源移到目標,因爲哪個時間戳正在改變。現在我已將其更改爲fs.rename。它不會更改時間戳。謝謝.. – 2014-09-03 06:34:22

0

輸出可以使用減法來控制。我想你可以嘗試減速器中的邏輯。

請注意reducer的數量=輸出文件的數量。