【问题标题】:How to filter keys or values in Hadoop map/reduce job output file?如何过滤 Hadoop map/reduce 作业输出文件中的键或值?
【发布时间】:2012-11-26 22:36:01
【问题描述】:

通常,Hadoop map/reduce 作业会生成写入作业输出文件的键值对列表(使用OutputFormat 类)。很少有键和值都有用,通常键或值都包含必需的信息。

是否有一个选项(在客户端)来抑制输出文件中的键或抑制输出文件中的值? 如果我只想为一项特定工作执行此操作,我可以创建新的OutputFormat 实现,它会忽略键或值。但我需要可重复用于更多工作的通用解决方案。

编辑:我可能不清楚“我需要可重复用于更多工作的通用解决方案”是什么意思。让我举例说明一下:

假设我有很多准备好的MapperReducerOutputFormats 课程。我想将它们组合到不同的“作业”并在不同的输入文件上运行这些“作业”以生成各种输出文件。在某些情况下(对于某些工作)我需要抑制键,因此它们不会写入输出文件。我不想更改我的映射器的代码,输出格式的缩减器——它们太多了。我需要一些不需要更改给定映射器、reducer 或输出格式的代码的通用解决方案。我该怎么做?

【问题讨论】:

  • 您是否考虑过通过 JobConf 传入额外的参数,然后根据值切换逻辑?

标签: java hadoop mapreduce outputformat


【解决方案1】:

没有理由不能将您在 hadoop 流程中的最后一步配置为将 NullWritable 作为键或值写入。您只是不应该期望该文件在任何后续的 map reduce 步骤中会有很大的用处。

【讨论】:

  • 我非常理解......我希望“最后一步”是指减少阶段。您建议我的减速器将NullWritable 作为键或值类型?在那种情况下,这不是可重用的解决方案......假设我有一组准备好的映射器、reducers、输出格式......我想在不同的输入文件上多次运行其中一些但不修改所有这些映射器的代码和在某些情况下我想抑制键。
  • 对,如果你想抑制键,你要么必须运行另一个 mapreduce 步骤来抑制它们,要么在 Reducer 中使用 MultipleOutputs 来写入两个版本的数据:一个带键,一个抑制键。
  • 恐怕我们仍然不了解对方:) 请参阅我对原始问题的编辑。我试图更好地解释我想要做什么。谢谢
  • 另一个 mapreduce 步骤是指另一个工作?那将原始作业的输出文件作为输入,删除键,然后将结果写入另一个输出文件?
  • 是的。这是正确的。没有办法神奇地清除文件的键或值。
猜你喜欢
  • 1970-01-01
  • 2011-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-19
相关资源
最近更新 更多