hadoop - Hadoop mapreduce设计/路由映射器和化简器一次完成

标签 hadoop mapreduce reduce chaining mapper

我想在一项工作中进行这样的mapreduce设计。

范例:

我想要一份工作:************************************************ *****************

[映射器A] ---> [映射器C]

[映射器B] ---> [ reducer B]

之后[Reducer B] ---> [Mapper C]

[映射器C] ---> [ reducer C] ****************************************** ********************************************

因此,[映射器A]和[归约器B] ---> [映射器C]。接下来,[映射器C]继续执行[归约器C]。我希望以上所有方案都能完成一项工作。

这就像在一个mapreduce作业中进行路由。我可以在一个作业中将许多映射器路由到特定的reducer,然后再将其继续到非reducer的其他映射器。我需要你的建议

谢谢.....

最佳答案

-编辑开始
为了简化问题,假设您有三个作业JobA,JobB,JobC,每个作业都包含一个映射和一个缩小阶段。
现在,您要在JobC的映射器任务中使用JobA的映射器输出,因此JobC只需要等待JobA完成其映射任务,就可以在JobA中使用MultipleOutputs类在JobC可以保存的位置保存/写入映射阶段输出。投票。
-编辑结束

在编程上,您可以执行以下代码,其中getJob()应该在相应的Map-reduce类中定义,您可以在其中指定配置,DistributedCache,输入格式等。

main () {
    processMapperA();
    processMapReduceB();
    processMapReduceC();
}

processMapperA()
{
    // configure the paths/inputs needed, for example sake I am taking two paths
    String path1 = "path1";
    String path2 = "path2";
    String[] mapperApaths = new String[]{path1, path2};

    Job mapperAjob = MapperA.getJob(mapperApaths, <some other params you want to pass>);
    mapperAjob.submit();
    mapperAjob.waitForCompletion(true);
}

processMapReduceB()
{
    // init input params to job
    .
    .
    Job mapReduceBjob = MapReduceB.getJob(<input params you want to pass>);
    mapReduceBjob.submit();
    mapReduceBjob.waitForCompletion(true);
}
processMapReduceC()
{
    // init input params to job
    .
    .
    Job mapReduceCjob = MapReduceC.getJob(<input params you want to pass like outputMapperA, outputReducerB>);
    mapReduceCjob.submit();
    mapReduceCjob.waitForCompletion(true);
}

要获得对工作流程的更多控制,可以考虑使用Oozie或SpringBatch。

使用Oozie,您可以定义workflow.xml,并根据需要计划每个作业的执行。
SpringBatch也可以用于相同的功能,但是需要一定的编码和理解,如果您有背景知识,可以立即使用。
-编辑开始
Oozie是工作流管理工具,它使您可以配置和安排作业。
-编辑结束

希望这可以帮助。

关于hadoop - Hadoop mapreduce设计/路由映射器和化简器一次完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28187226/

相关文章:

linux - 在hdfs路径中创建目录

scala - 为 Spark 作业的单元测试模拟 HTable 数据

mysql - 如何使 sap lumira 桌面不导入大数据

hadoop - Reducer类中的Run和Reduce方法

hadoop - map 简化和RDBMS

swift - 在 Swift 4 中使用索引进行映射/归约

hadoop - 如何在代码中获取 Hadoop 中的统计信息?

java - 无法使用distcp将一个HDFS数据复制到另一个HDFS位置

arrays - 在 Swift 中遍历 UInt8 整数数组;对数组的子集执行计算

javascript - 如何在对象上使用 reduce