2012-03-14 126 views
2

我使用Hadoop开发Map/Reduce。 我的驱动程序程序将MapReduce作业(使用Map和Reduce任务)提交给Hadoop的Job跟踪器。我有两个问题: a)我的Map或reduce任务可以提交另一个MapReduce作业吗? (使用相同的群集Hadoop和相同的Job Tracker)。这意味着,我开始的驱动程序提交一个mapreduce作业,其中,map或reduce任务产生另一个MapReduce作业,并将其提交给同一个集群Hadoop和同一个作业跟踪器。我认为这是可能的。但是我不确定。而且,这是一个好的解决方案?如果不是,我们能否有另一种解决方案?地图减少地图减少

二)我们可以用两种地图的任务(有两个不同的功能和一个在MapReduce工作Reduce任务? 非常感谢

+1

什么是你试图通过从MapReduce工作中推出MapReduce作业完成了吗? – 2012-03-15 01:57:52

+0

我有两个输入大型数据集(set1和set2)。对于set1的每个记录元素,我需要集合2的所有元素才能处理它。所以我打算让我的驱动程序将set1作为输入数据提交给mapreduce作业。然后,在Map Task中,为了处理set1的记录元素,我打算提交另一个输入数据为set2的mapReduce作业。我不知道这可能与否。我认为这在理论上是可能的,但不可能,因为没有插槽可用。如果我的Map函数使用另一个JobTracker将另一个MapReduce作业提交给另一个Hadoop集群,这是可能的吗? – 2012-03-15 16:01:45

回答

1

你当然可以连锁使用ChainMapper class

您可以将多个地图阶段还可以使用JobControl类和addDependingJob()方法设置作业之间的依赖关系,这可能更适合将Map Reduce作业从其他Map Reduce作业产生出来,这违背了Map Reduce的基本方法,因为它可能会导致您的解决方案不再是对单个节点上的硬件故障具有很强的可靠性。

Chuck Lam的Hadoop在行动的第5章很好地概述了这一点。

0

不,我不认为它是可能的。另一种解决方案是启动一个单独的MapReduce任务,输入为set1和set2,在Map阶段,添加if条件,如果元组读取来自set 1,则将其添加到arraylist1,如果来自set 2,则将其添加到arraylist2 。然后你用这两个数组列表做任何你想做的事!

0

您应该查看Cascading,这是将某个mapreduce作业的输出连锁(或“级联”)到另一个mapcreduce作业的输出。它抽象出了实现这一目标所需的大量工作,并允许开发人员在更高的层次上编写复杂的多步骤mapreduce作业。

0

我建议你看看Oozie框架。