如何生成自定义输出文件名?

时间:2011-12-21 13:19:15

标签: hadoop

我对输出文件名生成有疑问。我正在使用Hadoop-0.19.2,我在输入文件夹上有两个输入文件(/ data / inp / 20111203_12345,/ data / inp / 20111204_12345),我想生成输出对应的输出文件夹(/ data / out / 20111203_12345) / part-0000X,/ data / out / 20111204_12345 / part-0000x)

Map Reduce程序只被调用一次。

1 个答案:

答案 0 :(得分:0)

由于输入和输出文件之间存在一对一的映射,因此可以假设输入文件中没有数据合并。

1)在映射器中,进行一些处理并输出KV对作为filePath / value。然后,特定文件的所有数据将转到单个映射器。在mapper中实现以下内容以获取filePath

void configure(JobConf conf) {
    filePath = conf.get("map.input.file");
}

请注意,filePath包含输入文件名,包括目录。

2)MultipleOutputformat允许将数据写入多个文件,输出文件名可以从输出KV对派生。 reducer的键是输入文件目录和名称,可用于派生输出文件名。

使用上述方法,如果输入文件很大,则reducer可能是瓶颈,因为每个reducer将处理来自单个文件的数据。我想不出更好的方法:)