我開發了一個代碼,該代碼運行map reduce作業以從FTP服務器讀取文件並將其寫入HDFS
。進入HDFS
它將文件從FTP寫入指定的輸出目錄,並將其命名爲part-0000。如果我在FTP服務器上有多個文件,我將它們全部寫入HDFS
中的那部分0000文件。將MapReduce作業的部分0000文件命名爲hadoop中的輸入文件
爲了避免這種情況,我計劃將文件的名稱作爲關鍵字,並將數據作爲值傳遞。因此,reducer將數據輸入到輸出文件中,其中鍵爲文件的名稱。
據我所知,我必須使用延伸MultipleTextOutputFormat
的outputformat
。我寫它如下
static class MultiFileOutput extends MultipleTextOutputFormat<Text, Text> {
protected String generateFileNameForKeyValue(Text key, Text value,String name) {
System.out.println("key is :"+ key.toString());
System.out.println("value is :"+ value.toString());
System.out.println("name is :"+ name.toString());
return key.toString();
}
但我無法通過正在處理的輸入文件的名稱。我如何獲得輸入文件的名稱?
map.input.file
和
FileSystem fs = file.getFileSystem(conf);
String fileName=fs.getName();
不返回輸入文件的名稱。
任何指針?
周圍的一些工作,我已經找到了一些東西,現在我的問題範圍縮小到這一步之後,如何讓輸入目錄中輸入文件名被處理? – RadAl