我需要将我的 Map Reduce jar 文件拆分为两个作业,以获得两个不同的输出文件,一个来自两个作业的每个 reducer。

我的意思是第一个作业必须生成一个输出文件,该文件将作为链中第二个作业的输入。

我在 hadoop 版本 0.20(目前我使用的是 0.18)中阅读了一些关于 ChainMapper 和 ChainReducer 的内容:那些可能对我的需求有好处?

任何人都可以建议我一些链接,在哪里可以找到一些示例以使用这些方法?或者也许有另一种方法可以解决我的问题?

谢谢,

卢卡

最佳答案

有很多方法可以做到。

  • 级联作业

    为第一个作业创建 JobConf 对象“job1”,并将所有参数设置为“input”为输入目录,“temp”为输出目录。执行此作业: JobClient.run(job1)

    在它的正下方,为第二个作业创建 JobConf 对象“job2”,并将所有参数设置为“temp”作为输入目录,“输出”作为输出目录。执行此作业: JobClient.run(job2)
  • 两个 JobConf 对象

    创建两个 JobConf 对象并在其中设置所有参数,就像 (1) 一样,只是您不使用 JobClient.run。

    然后以jobconfs为参数创建两个Job对象:
    Job job1=new Job(jobconf1); Job job2=new Job(jobconf2);
    使用 jobControl 对象指定作业依赖项,然后运行作业:
    JobControl jbcntrl=new JobControl("jbcntrl");
    jbcntrl.addJob(job1);
    jbcntrl.addJob(job2);
    job2.addDependingJob(job1);
    jbcntrl.run();
    
  • ChainMapper 和 ChainReducer

    如果你需要一个类似于 Map+ 的结构 |减少 | Map*,您可以使用 Hadoop 0.19 及更高版本附带的 ChainMapper 和 ChainReducer 类。请注意,在这种情况下,您只能使用一个 reducer ,但可以在它之前或之后使用任意数量的映射器。
  • 关于hadoop - 映射减少 : ChainMapper and ChainReducer,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3059736/

    10-12 23:02