我需要将Map Reduce jar文件拆分为两个作业,以获得两个不同的输出文件,一个来自两个作业的每个reducers.
我的意思是第一个作业必须生成一个输出文件,该文件将成为链中第二个作业的输入.
我在hadoop版本0.20中阅读了有关ChainMapper和ChainReducer的内容(目前我使用的是0.18):那些可能对我的需求有益吗?
任何人都可以建议我在哪里找到一些例子来使用这些方法吗?或者也许有另一种方法来实现我的问题?
谢谢,
卢卡
有很多方法可以做到.
层叠工作
为第一个作业创建JobConf对象"job1",并将所有参数设置为inputdirectory,将"temp"设置为输出目录.执行这项工作:JobClient.run(job1)
.
紧接其下方,为第二个作业创建JobConf对象"job2",并将所有参数设置为"temp"作为inputdirectory并将"output"设置为输出目录.执行这项工作: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,但在它之前或之后只能使用任意数量的映射器.