【发布时间】:2011-02-10 07:02:07
【问题描述】:
我要求我的映射器在某些情况下可以生成一个新的键/值供另一个映射器处理。有没有理智的方法可以做到这一点?我考虑过编写自己的自定义输入格式(队列?)来实现这一点。有任何想法吗?谢谢!
编辑:我应该澄清一下
方法一
地图步骤 1 (foo1, bar1) -> out1 (foo2, bar2) -> out2 (foo3, bar3) -> (fooA, barA), (fooB, barB) (foo4, bar4) -> (fooC, barC) 减少步骤 1: (out1) -> 好的 (out2) -> 好的 ((fooA, barA), (fooB, barB)) -> 创建地图第 2 步 ((fooC, barC)) -> 也将其发送到地图步骤 2 地图步骤 2: (fooA, barA) -> out3 (fooB, barB) -> (fooD, barD) (fooC, barC) -> out4 减少步骤 2: (out3) -> 好的 ((fooD, barD)) -> 创建地图第 3 步 (out4) -> 好的 地图步骤 3: (食物,酒吧)-> out5 减少步骤 3: (out5) -> 好的 - 没有更多的地图步骤。完成的 -所以它是完全递归的。一些键/值发出输出以减少,一些生成新的键/值进行映射。我真的不知道在给定的运行中我可能会遇到多少 Map 或 Reduction 步骤。
方法二
地图步骤 1 (foo1, bar1) -> out1 (foo2, bar2) -> out2 (foo3, bar3) -> (fooA, barA), (fooB, barB) (foo4, bar4) -> (fooC, barC) (fooA, barA) -> out3 (fooB, barB) -> (fooD, barD) (fooC, barC) -> out4 (食物,酒吧)-> out5 减少步骤 1: (out1) -> 好的 (out2) -> 好的 (out3) -> 好的 (out4) -> 好的 (out5) -> 好的这个方法会让映射器提供它自己的输入列表。我不确定最终哪种方式更容易实现。
【问题讨论】:
-
我是否理解正确,不同的输入具有不同的 MR 处理深度?有的需要一个 MR 处理,有的需要链?
-
是的,完全正确。一个很好的类比是递归目录列表。映射器将获取一个目录,并发出文件。如果我点击另一个目录,我会将其反馈给映射器。
-
等等,我认为这更像是相反的方式。我的意思是说它类似于一个获取文件并发出它们的映射器。如果其中一个文件恰好是一个目录,它将读取目录的内容,并将每个文件反馈给映射器。