等待hadoop中几个作业的完成

kcrjzv8t  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(579)

我需要提交几个作业,这将使用相同的输入文件夹,但在不同的输出文件夹产生不同的结果。这些工作应该并行运行,而不是相互依赖。
有没有什么简单的方法来等待所有这些作业的完成(比如java并发包中的completionservice),或者我需要从头开始创建它—记住所有作业的JobID并定期检查所有作业的状态?

zvms9eto

zvms9eto1#

如果您使用的是新的javamapreduceapi,那么可以使用jobcontrol对象来调度多个具有依赖关系的controlledjob示例。它只涉及将所有作业对象 Package 在controlledjob对象和controlledjob.adddependingjob(controlledjob dependingjob)中,以注册作业的依赖项。例如,如果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对象将确保作业在其依赖的作业完成之前不会运行。
作业本身是单独配置的,就像通常设置单个作业一样。这使得配置共享或单独的输入/输出路径变得简单。

相关问题