等待Hadoop中的几个作业完成

时间:2013-09-14 23:21:40

标签: hadoop completion-service

我需要提交几个作业,这些作业将使用相同的输入文件夹,但会在不同的输出文件夹中生成不同的结果。这些工作应该并行运行,而不是相互依赖。

有没有简单的方法可以等待所有这些作业的完成(比如java并发包中的CompletionService),或者我需要从头创建它 - 记住所有作业的jobids并定期检查所有作业的状态?

1 个答案:

答案 0 :(得分:1)

如果您使用的是新的Java MapReduce API,则可以使用JobControl对象来安排具有依赖项的多个ControlledJob实例。它只涉及将所有Job对象包装在ControlledJob对象和ControlledJob.addDependingJob(ControlledJob dependsJob)中以注册作业的依赖关系。例如,如果jobC在运行之前依赖于jobA和jobB:

Configuration conf = new Configuration();
Job jobA = new ControlledJob(new Job(conf));
Job jobB = new ControlledJob(new Job(conf));

Job jobC = new ControlledJob(new Job(conf));
jobC.addDependingJob(jobA);
jobC.addDependingJob(jobB);

JobControl jobControl = new JobControl();
jobControl.addJob(jobA);
jobControl.addJob(jobB);
jobControl.addJob(jobC);

jobControl.run();

然后,JobControl对象将确保作业在其所依赖的作业完成之前不会运行。

作业本身是单独配置的,因为您通常会设置单个作业。这使得配置共享或单独的输入/输出路径成为一项简单的任务。