【问题标题】:Correlating input files to output files将输入文件与输出文件相关联
【发布时间】:2012-01-24 04:33:34
【问题描述】:

我有一个 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

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

【问题讨论】:

    标签: hadoop mapreduce


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 我不明白 - 你能举个例子更清楚一点吗? If Hadoop later decides to run more mappers/reducers - Hadoop 不会即时决定映射器/减速器的数量。映射器的数量等于输入拆分的数量,用户指定减速器的数量。
      • 我假设随着时间的推移,您将在不同大小的不同输入文件上运行相同的 Hadoop 作业。一个常见的用例是每天分析前一天捕获的日志文件。
      • 我可以通过避免拆分或使用 .gz 文件来确保每个文件都由一个映射器处理。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-04
      • 1970-01-01
      • 2017-06-19
      • 1970-01-01
      • 2012-10-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多