使用Hadoop mapreduce并行简化



我正在使用Hadoop的MapReduce。我有一个文件作为map函数的输入,map函数做一些事情(与问题无关)。我希望我的reducer获取映射的输出并将其写入两个不同的文件。在我看来(我想要一个有效的解决方案),有两种方法:

  1. 1个减速器,它将知道识别不同的情况并写入2个不同的上下文。
  2. 2个并行减速机,每个减速机都知道识别自己的相关输入,忽略其他减速机的输入,这样每个减速机都将写入一个文件(每个减速机将写入不同的文件)。

我更喜欢第一个解决方案,因为它意味着我将只检查map的输出一次而不是两次并行-但如果第一个不支持以某种方式-我将很高兴听到第二个建议的解决方案。

*注意:这两个最终文件应该是分开的,现在不需要将它们合并。

Hadoop API具有创建多个输出的功能,称为MultipleOutputs,这使您的首选解决方案成为可能。

如果您在映射阶段知道记录必须到哪个文件,那么您可以用特殊的键标记映射输出,指定应该到哪个文件。例如,如果记录R1必须进入文件1,您将输出<1, R1>..(1是关键……如果一个记录R2必须去到文件2,你的映射输出将是<2, R2>.

然后如果你配置map reduce作业只使用2个reducer ..它将保证所有标记为<1, _>的记录将被发送到一个reducer,而<2, _>将被发送到另一个reducer。

这将比你的首选解决方案,因为你仍然通过你的地图输出只一次。与此同时,它将是并行的。

相关内容

  • 没有找到相关文章

最新更新