将输入文件关联到输出文件

时间:2012-01-24 04:33:34

标签: hadoop mapreduce

我有一个MR流媒体工作。我的代码是用C ++编写的。它只是一个映射器工作,没有减速器。作业的输入是包含三个文件的目录。 Job创建了3个映射器。每个映射器处理一个输入文件并以不同的格式生成一个输出文件。

输入文件如:

MyDir/file1
MyDir/file2
MyDir/file3

输出文件如下:

MyDir/Output/part-00000
MyDir/Output/part-00001
MyDir/Output/part-00002

我想将输入文件关联到输出文件。例如,输入文件MyDir/file1可以对应于输出文件MyDir/Output/part-00002,即处理输入文件MyDir/file1的映射器可能已经生成了输出文件MyDir/Output/part-00002

我想知道这种关系,即哪个输入文件对应于哪个输出文件。有没有一种简单的方法可以解决这个问题?

2 个答案:

答案 0 :(得分:0)

我能想到的一种方法是让作业的i / p和o / p文件名相同。获取映射器正在处理的输入文件名(map.input.file environment属性),然后在MultipleOutputFormat#generateFileNameForKeyValue方法中使用它。

答案 1 :(得分:0)

根据Hadoop的设计方式,您可以依赖的唯一关系是,输出文件的数量与正在运行的最终任务的数量相对应,通常是减速器,而不是根据其他答案明确命名输出文件。 (在你的情况下,因为你没有运行任何减速器)。

如果Hadoop后来决定运行更多的映射器/缩减器而不是仅仅3个(更大的输入文件,更多可用节点),您将获得不同数量的输出文件。