Map Reduce:ChainMapper和ChainReducer

zer*_*o51 3 hadoop mapreduce

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

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

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

任何人都可以建议我在哪里找到一些例子来使用这些方法吗?或者也许有另一种方法来实现我的问题?

谢谢,

卢卡

小智 11

有很多方法可以做到.

  1. 层叠工作

    为第一个作业创建JobConf对象"job1",并将所有参数设置为inputdirectory,将"temp"设置为输出目录.执行这项工作:JobClient.run(job1).

    紧接其下方,为第二个作业创建JobConf对象"job2",并将所有参数设置为"temp"作为inputdirectory并将"output"设置为输出目录.执行这项工作:JobClient.run(job2).

  2. 两个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();
    
    Run Code Online (Sandbox Code Playgroud)
  3. ChainMapper和ChainReducer

    如果你需要一个像Map + |那样的结构 减少| Map*,您可以使用随Hadoop版本0.19及更高版本附带的ChainMapper和ChainReducer类.请注意,在这种情况下,您只能使用一个reducer,但在它之前或之后只能使用任意数量的映射器.