繁体   English   中英

Map Reduce中的Map Reduce

[英]Map Reduce in Map Reduce

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

b)我们可以在MapReduce作业中使用两个Map任务(具有两个不同的功能和一个Reduce任务吗?)

您当然可以使用ChainMapper类链接多个地图阶段

您还可以使用JobControl类和addDependingJob()方法设置作业之间的依赖关系。 这可能比让Map Reduce作业产生其他Map Reduce作业更可取,因为这可能与Map Reduce的基本方法背道而驰,因为这可能会导致您的解决方案不再能够抵抗单个节点上的硬件故障。

Chuck Lam撰写的《 Hadoop in Action》第5章对此进行了很好的概述。

不,我认为这不可能。 另一种解决方案是启动一个输入为set1和set2的singe MapReduce任务,然后在Map阶段添加if条件,如果从set 1中读取元组,则将其添加到arraylist1中,如果从set 2中读取元组,则将其添加到arraylist2中。 。 然后,您可以使用这两个arraylist进行任何操作!

您应该查看级联,这种级联是将一个mapreduce作业的输出链接(或“级联”)到另一个mapreduce作业的输出。 它抽象化了实现这一目标所需的许多繁琐工作,并允许开发人员在更高层次上进行编写,以完成复杂的多步骤mapreduce作业。

我建议您查看Oozie框架。

  1. 可以从另一个MR启动MR。 oozie作业启动器使用map作为启动器启动任何动作(猪,java,MR)。

  2. 用户“ MultiInputs” API可为不同的输入路径定义不同的映射,但使用相同的reducer。 这是执行“ Joins”的经典示例https://hadoop.apache.org/docs/stable/api/org/apache/hadoop/mapreduce/lib/input/MultipleInputs.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM