2

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

是否有任何简单的方法可以等待所有这些作业的完成(例如 Java 并发包中的 CompletionService),或者我需要从头开始创建它 - 记住所有作业的作业 ID 并定期检查所有作业的状态?

4

1 回答 1

1

如果您使用新的 Java MapReduce API,您可以使用 JobControl 对象来调度多个具有依赖关系的 ControlledJob 实例。它只涉及将所有 Job 对象包装在 ControlledJob 对象和 ControlledJob.addDependingJob(ControlledJobdependentJob) 中以注册作业的依赖项。例如,如果 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 对象将确保在它所依赖的作业完成之前作业不会运行。

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

于 2013-09-15T23:27:49.273 回答