我需要将Map Reduce jar文件拆分为两个作业,以获得两个不同的输出文件,一个来自两个作业的每个reducers。
我的意思是第一个作业必须生成一个输出文件,该文件将成为链中第二个作业的输入。
我在hadoop版本0.20中读到了有关ChainMapper和ChainReducer的内容(目前我使用的是0.18):那些可能对我的需求有用吗?
有人可以建议我一些链接,在哪里可以找到一些例子来使用这些方法吗?或者也许还有另一种方法来解决我的问题?
谢谢,
卢卡
答案 0 :(得分:11)
有很多方法可以做到。
级联工作
为第一个作业创建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类。请注意,在这种情况下,您只能使用一个减速器,但在它之前或之后只能使用任意数量的映射器。
答案 1 :(得分:0)
我认为上述解决方案涉及磁盘I / O操作,因此将使用大型数据集减速。可选择使用Oozie或Cascading。