2
我希望在每次通過在文件名末尾追加時間戳記來運行作業時,將地圖縮減程序的輸出文件添加到同一目錄。將輸出文件添加到Mapreduce中的現有輸出目錄
目前我能夠在文件輸出文件的末尾添加時間戳,但我無法找到如何將文件添加到同一個輸出目錄而不是每次覆蓋它。
我希望在每次通過在文件名末尾追加時間戳記來運行作業時,將地圖縮減程序的輸出文件添加到同一目錄。將輸出文件添加到Mapreduce中的現有輸出目錄
目前我能夠在文件輸出文件的末尾添加時間戳,但我無法找到如何將文件添加到同一個輸出目錄而不是每次覆蓋它。
您可以將輸出文件寫入臨時文件夾,並在作業結束後將其移至目標文件夾。從一個文件夾移動所有文件到另一個方法的例子:
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
}
}
輸出可以使用減法來控制。我想你可以嘗試減速器中的邏輯。
請注意reducer的數量=輸出文件的數量。
目前我下面什麼都你提到使用Fileutil.copy相同的邏輯,但問題是,它正在改變時間戳以前生成的文件也是因爲複製,我想保留以前生成的文件的時間戳。 – 2014-09-02 13:30:43
據我所知,你只需將新文件複製到目標文件夾即可。爲什麼它會更改以前生成的文件的時間戳? – 2014-09-02 14:27:07
Fileutil.copy將文件從源移到目標,因爲哪個時間戳正在改變。現在我已將其更改爲fs.rename。它不會更改時間戳。謝謝.. – 2014-09-03 06:34:22