我需要提交几个作业,这将使用相同的输入文件夹,但在不同的输出文件夹产生不同的结果。这些工作应该并行运行,而不是相互依赖。有没有什么简单的方法来等待所有这些作业的完成(比如java并发包中的completionservice),或者我需要从头开始创建它—记住所有作业的JobID并定期检查所有作业的状态?
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对象将确保作业在其依赖的作业完成之前不会运行。作业本身是单独配置的,就像通常设置单个作业一样。这使得配置共享或单独的输入/输出路径变得简单。
1条答案
按热度按时间zvms9eto1#
如果您使用的是新的javamapreduceapi,那么可以使用jobcontrol对象来调度多个具有依赖关系的controlledjob示例。它只涉及将所有作业对象 Package 在controlledjob对象和controlledjob.adddependingjob(controlledjob dependingjob)中,以注册作业的依赖项。例如,如果jobc在运行之前依赖于joba和jobb:
然后,jobcontrol对象将确保作业在其依赖的作业完成之前不会运行。
作业本身是单独配置的,就像通常设置单个作业一样。这使得配置共享或单独的输入/输出路径变得简单。