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

Hadoop 将输入文件关联到输出文件,hadoop,mapreduce,Hadoop,Mapreduce,我有份工作。我的代码是C++的。这是一个只绘制地图的工作,没有减速器。作业的输入是一个包含三个文件的目录。作业创建3个映射器。每个映射器处理一个输入文件并生成一个不同格式的输出文件 输入文件如下所示: MyDir/file1 MyDir/file2 MyDir/file3 MyDir/Output/part-00000 MyDir/Output/part-00001 MyDir/Output/part-00002 输出文件如下所示: MyDir/file1 MyDir/file2 MyDir

我有份工作。我的代码是C++的。这是一个只绘制地图的工作,没有减速器。作业的输入是一个包含三个文件的目录。作业创建3个映射器。每个映射器处理一个输入文件并生成一个不同格式的输出文件

输入文件如下所示:

MyDir/file1
MyDir/file2
MyDir/file3
MyDir/Output/part-00000
MyDir/Output/part-00001
MyDir/Output/part-00002
输出文件如下所示:

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


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

我能想到的一种方法是让作业的I/p和o/p文件名相同。获取映射程序正在处理的输入文件名(环境属性),然后在方法中使用它。

关于Hadoop的设计,如果不按照另一个答案明确命名输出文件,您可以依赖的唯一关系是,输出文件的数量对应于正在运行的最终任务的数量,通常是还原程序(在您的情况下是映射程序,因为您没有运行任何还原程序)


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

我不明白-您能用一个示例更清楚一点吗
如果Hadoop后来决定运行更多的映射器/还原器
-Hadoop不会立即决定映射器/还原器的数量。映射器的#等于输入拆分的数量,用户指定还原器的#。我假设随着时间的推移,您将在不同大小的输入文件上运行相同的Hadoop作业。一个常见的用例是每天分析前一天捕获的日志文件。我可以通过避免拆分或使用.gz文件来确保每个文件都由一个映射器处理。