我有一个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
。
我想知道这种关系,即哪个输入文件对应于哪个输出文件。有没有一种简单的方法可以解决这个问题?
答案 0 :(得分:0)
我能想到的一种方法是让作业的i / p和o / p文件名相同。获取映射器正在处理的输入文件名(map.input.file environment属性),然后在MultipleOutputFormat#generateFileNameForKeyValue方法中使用它。
答案 1 :(得分:0)
根据Hadoop的设计方式,您可以依赖的唯一关系是,输出文件的数量与正在运行的最终任务的数量相对应,通常是减速器,而不是根据其他答案明确命名输出文件。 (在你的情况下,因为你没有运行任何减速器)。
如果Hadoop后来决定运行更多的映射器/缩减器而不是仅仅3个(更大的输入文件,更多可用节点),您将获得不同数量的输出文件。