【发布时间】:2014-01-23 14:12:22
【问题描述】:
我有两个 MapReduce 作业,第一个 Reducer 的输出是第二个 Mapper 的输入:
Map1 -> Reduce1 -> Map2 -> Reduce2
现在Map2 从Reduce1 输出的文件中读取。所以Map1 -> Reduce1 和Map2 -> Reduce2 是独立的。
它可以工作,但如果 Reduce1 的输出直接是 Map2 的输入,它会更容易,我认为更优化。
有没有办法做到这一点?在这种情况下,Map2 将只是一个身份映射器,所以如果我能这样做会更好:
Map1 -> Reduce1 -> Reduce2
Reduce1、Map2 和 Reduce2 具有相同的输入和输出类型。
谢谢!
【问题讨论】:
-
您仍然可以将标识映射器用作 Mapper2,方法是:
conf.setOutputFormat(SequenceFileOutputFormat.class);用于第一个驱动程序类,conf.setInputFormat(SequenceFileInputFormat.class);用于第二个驱动程序类。我不知道在 hadoop 2.2 中链接作业的语法变化,所以我不会发布答案(暂时)。 -
按照 #vefthym 的建议使用 SequenceFileOutputFormat 的好主意,它可以提供优化
-
@vefthym 不错,这样就更好了。但是我还是要用临时文件,没办法直接把
Reduce1的数据传给Map2? -
我认为没有。也许我错了。
标签: java hadoop mapreduce chaining