我开发了一个代码,它运行一个 map reduce 作业来从 FTP 服务器读取文件并将其写入HDFS
. 将文件从 FTP写入HDFS
指定的输出目录,将其命名为 part-0000。如果我在 FTP 服务器上有多个文件,我会将它们全部写入HDFS
.
为避免这种情况,我计划将文件名作为 key 以及数据作为 value 传递。因此,reducer 将数据放入一个输出文件,其中的键是文件名。
我知道我必须使用outputformat
that extends 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();
不要返回输入文件的名称。
任何指针?