2013-09-14 7 views
2

Мне нужно отправить несколько заданий, в которых будет использоваться одна и та же папка ввода, но будет производиться разные результаты в разных папках вывода. Эти задания должны выполняться параллельно и не зависят друг от друга.Ждите завершения нескольких заданий в Hadoop

Есть ли какой-либо простой способ дождаться завершения всех этих заданий (например, CompletionService в параллельном пакете java), или мне нужно создать его с нуля - помните о заданиях всех заданий и периодически проверяйте статус всех заданий?

ответ

1

Если вы используете новый API Java MapReduce, вы можете использовать объект JobControl для планирования нескольких экземпляров ControlledJob с зависимостями. Это просто включает в себя завертывание всех ваших объектов Job в объектах ControlledJob и ControlledJob.addDependingJob (ControlledJob dependJob) для регистрации зависимостей задания. Например, если 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 будет гарантировать, что работа не не работает, пока рабочие места это зависит от завершения.

Рабочие места настраиваются отдельно, так как вы обычно настраиваете одно задание. Это упрощает задачу настройки общих или отдельных путей ввода/вывода.

Смежные вопросы