Измерьте время работы Hadoop с помощью JobControl
Я использовал для запуска моей работы Hadoop со следующим
long start = new Date().getTime();
boolean status = job.waitForCompletion(true);
long end = new Date().getTime();
Таким образом, я мог бы измерить время, затраченное на работу, как только она заканчивается прямо в моем коде.
Теперь мне нужно использовать JobControl, чтобы выразить зависимости между моими заданиями:
JobControl jobControl = new JobControl("MyJob");
jobControl.addJob(job1);
jobControl.addJob(job2);
job3.addDependingJob(job2);
jobControl.addJob(job3);
jobControl.run();
Однако после выполнения jobControl.run() код никогда не идет дальше, поэтому я не могу включить код для опроса в jobControl.getState() для завершения задания.
Как я могу измерить время, затраченное на работу, используя JobControl?
1 ответ
Решение
JobControl не имеет приятной функциональности, чтобы позволить вам подключить и получить эту информацию. У вас есть несколько (потенциально болезненных) вариантов:
- Начните
JobControl.run()
в отдельной теме, и в вашей основной теме, опроситеJobControl.getXXXJobs()
методы для отслеживания, когда рабочие места меняют состояние - Рассмотрите возможность использования URL-адреса уведомления о завершении задания, но для этого вам потребуется запустить "сервер" в вашем клиенте для получения событий уведомления, а затем попытаться вернуться назад после окончания задания
- Расширить
JobControl
а такжеjobcontrol.Job
объекты для отслеживания изменений состояния задания и добавления методов для запроса времени начала / окончания