Измерьте время работы 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 объекты для отслеживания изменений состояния задания и добавления методов для запроса времени начала / окончания
Другие вопросы по тегам