我使用Hadoop开发Map / Reduce。 我的驱动程序将一个MapReduce作业(带有Map和Reduce Task)提交给Hadoop的Job跟踪器。我有两个问题: a)我的Map或reduce任务可以提交另一个MapReduce作业吗? (使用相同的群集Hadoop和相同的Job Tracker)。这意味着,我的开始驱动程序提交了一个mapreduce作业,其中map或reduce任务产生另一个MapReduce作业并将其提交到同一个集群Hadoop和同一个Job Tracker。我认为这是可能的。但我不确定。而且,这是一个很好的解决方案如果没有,我们可以有另一种解决方案吗?
b)我们可以使用两个Map任务(在MapReduce作业中有两个不同的功能和一个Reduce任务吗? 非常感谢
答案 0 :(得分:1)
您当然可以使用ChainMapper class
链接多个地图阶段您还可以使用JobControl类和addDependingJob()方法设置作业之间的依赖关系。这可能比使Map Reduce作业从其他Map Reduce作业中产生更好,这与Map Reduce的基本方法相悖,因为它可能会使您的解决方案不再能够抵御单个节点上的硬件故障。
Chuck Lam的Hadoop in Action第5章对此有一个很好的概述。
答案 1 :(得分:0)
不,我认为不可能。替代解决方案是使用输入作为set1和set2启动单个MapReduce任务,并在Map阶段添加if条件,如果元组读取来自集合1,则将其添加到arraylist1,如果来自集合2,则将其添加到arraylist2 。然后你用这两个arraylists做任何你想做的事!
答案 2 :(得分:0)
你应该研究Cascading,它可以将一个mapreduce作业的输出链接(或“级联”)到另一个mapreduce作业。它抽象了实现这一目标所需的大量繁琐工作,并允许开发人员在更高层次上编写复杂的多步骤mapreduce工作。
答案 3 :(得分:0)
我建议你看一下Oozie框架。
答案 4 :(得分:0)
可以从另一个MR发射MR。 oozie job launcher使用map as launcher启动任何操作(pig,java,MR)。
用户"多输入" API为不同的输入路径定义不同的映射但使用相同的reducer。这是表演"加入"的典型例子。 https://hadoop.apache.org/docs/stable/api/org/apache/hadoop/mapreduce/lib/input/MultipleInputs.html