マップリデュースジョブを実行してFTPサーバーからファイルを読み取り、に書き込むコードを開発しましたHDFS
。HDFS
これに、FTPから指定された出力ディレクトリにファイルを書き込み、part-0000という名前を付けます。FTPサーバーに複数のファイルがある場合、それらすべてをその1つのpart-0000ファイルに書き込みますHDFS
。
これを回避するために、ファイルの名前をキーとして、データを値として渡す予定です。したがって、レデューサーは、ファイル名としてキーを使用してデータを出力ファイルに取り込みます。
outputformat
を拡張するを使用する必要があることを理解していますMultipleTextOutputFormat
。私はそれを次のように書きました
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();
入力ファイルの名前を返さないでください。
ポインタはありますか?