我正在使用Hadoop的MapReduce。我有一个文件作为map函数的输入,map函数做了一些事情(与问题无关)。我希望我的reducer能够获取地图的输出并写入两个不同的文件。 我看待它的方式(我想要一个有效的解决方案),我有两种方式:
我更喜欢第一种解决方案,因为它意味着我只会过一次地图输出而不是两次并行 - 但如果第一种方式不受支持 - 我会很高兴听到第二个建议的解决方案。
*注意:这两个最终文件应该是分开的,此时无需加入它们。
答案 0 :(得分:3)
Hadoop API具有创建名为MultipleOutputs的多个输出的功能,使您的首选解决方案成为可能。
答案 1 :(得分:1)
如果您在地图阶段知道记录必须转到哪个文件,您可以使用特殊键标记地图输出,指定它应该转到哪个文件。例如,如果记录R1必须转到文件1,则输出< 1,R1> ..(1是密钥.. file1的符号表示,R1是值)如果记录R2必须转到文件2,你的地图输出将是< 2,R2>。
然后,如果您将map reduce作业配置为仅使用2个reducers ..它将保证所有标记为< 1,_>的记录将被发送到1个reducer和< 2,_>将被发送到另一个。
这比你首选的解决方案更好,因为你仍然只通过你的地图输出一次..同时,它将并行。