如何将Hadoop ChainMapper与MultipleInputs混合使用

时间:2014-07-22 11:27:26

标签: java hadoop mapreduce

我有加入两种类型实体的hadoop作业。映射步骤会进行一些过滤,计算并生成适当的键值记录,以便以后加入。在这种情况下,Hadoop MultipleInputs可以正常工作。

地图逻辑的一部分可以在另一个上下文中重用,所以我正在寻找一种链接不同映射器的解决方案。我看到的默认值是ChainMapper。但是我还不清楚如何将它与MultipleInputs混合使用,每个输入都有单独的链。

请告诉我smb是否面临同样的问题,并且有一些想法,想法甚至是如何实现这一目标的例子。谢谢!

我继续浏览Hadoop源代码,看起来ChainMapper中的每个Mapper都在一个单独的线程中运行。在我的情况下,这看起来像开销。如果第一个映射器中的context.write在第二个映射器中直接调用map方法就足够了。

实施例: 一个地方有猴子和香蕉。

class Banana {
   location
   class
   mature
}

class Monkey {
   location
   type
}

YellowBananaMapper { filter out non yellow }
MatureBananaMapper { filter out non mature }
BananaByLocation { map banana to location -> banana }
MonkeyByLocation { map monkey to location -> monkey }

如果我有疑问:猴子哪里有足够的黄香蕉? 我愿意:猴子:MonkeyByLocation;香蕉:YellowBananaMapper - > BananaByLocation。

如果我被要求列出黄色成熟香蕉, 我愿意:香蕉:YellowBananaMapper - > MatureBananaMapper。

PS。

我已经读过有关Pig和Hive的内容,这不是我的解决方案,因为我被迫使用java MR作业。

0 个答案:

没有答案