2012-09-16 85 views

回答

1

修改Mapper类以过滤输入将会更加准确,因为不能保证组合器的执行,Hadoop可能会也可能不会执行组合器。此外,如果需要,它可能会执行多次。因此,您的MapReduce作业不应依赖于组合器的执行。

+0

我在我的mapper中使用TextInputFormat,它每次只读一行。我想标记一个文件,如果在某行中发现了某种模式...但是因为所有的map任务都是并行运行的,所以我无法知道某个文件是否被“标记”,直到所有行被扫描。这是我坚持的地方。 –

+0

你在使用合成器的观点是为什么我没有在我的答案中提到这些。我想我应该明确地说过。 – highlycaffeinated

1

浮现在脑海中一对夫妇的选择:

  • 修改您的映射不输出要筛选
  • 编写过滤掉你不想要的值减速的值,饲料该减速器的输出到另一个MapReduce作业

使用组合器不是此任务的好选择,因为@ 100gods提到,组合器执行不能保证。

+2

如果他无法更改映射器的代码,他也可以使用Combiners过滤出这些值。 –

+0

谢谢你们两位!合并器似乎是更好的选择,因为我无法更改映射器代码。 –

+0

合并器?这个选项不正确。不能保证组合器代码能够执行。如上所述,最好的选择是“不发出你需要滤除的关键值对”。 –