Истекшее время для задачи Hadoop

У меня есть кластер, на котором работает YARN. Он имеет 3 узла данных и 1 клиентский узел. Я отправляю все свои задания на клиентский узел. Как я могу получить прошедшее время для всех задач в конкретном задании.

Вероятно, RESTful API (https://hadoop.apache.org/docs/r2.4.1/hadoop-yarn/hadoop-yarn-site/MapredAppMasterRest.html). Но мне любопытно узнать, есть ли какой-либо Java API, чтобы сделать то же самое.

Я могу найти время начала для всех задач, используя метод getStartTime() класса TaskReport. Хотя время узлов в кластерах синхронизировано с использованием NTP, я не думаю, что было бы хорошей практикой использовать текущее время клиентской системы (System.currentTimeMillis()) для расчета прошедшего времени для выполнения задач. отставание, связанное со всеми узлами в кластере, даже в NTP.


person New Coder    schedule 19.07.2015    source источник
comment
Почему имеет значение расхождение часов, если вы просто вычисляете FinishTime - StartTime, оно измеряется на том же хосте.   -  person Thomas Jungblut    schedule 19.07.2015
comment
Да, согласен с этим. Но причина, по которой перекос имеет значение, заключается в том, что я также хочу знать прошедшее время для текущих задач. В случае текущих запущенных задач getFinishTime() вернет «Среда, 31 декабря, 19:00:00 EST 1969» в качестве значения по умолчанию.   -  person New Coder    schedule 19.07.2015
comment
Боюсь, это не совсем возможно. Лучшее, что вы можете сделать, это действительно использовать клиентские часы.   -  person Thomas Jungblut    schedule 19.07.2015


Ответы (1)


В классе Job есть метод #getTaskReports.

Вы можете использовать его таким образом, чтобы получить продолжительность задачи карты:

Job job = ...;
job.waitForCompletion(); 

TaskReport[] reports = job.getTaskReports(TaskType.MAP);
for(TaskReport report : reports) { 
   long time = report.getFinishTime() - report.getStartTime();
   System.out.println(report.getTaskId() + " took " + time + " millis!");
}
person Thomas Jungblut    schedule 19.07.2015
comment
Как упоминалось в комментариях для уточнения вопроса, это может не сработать, если задача все еще находится в состоянии выполнения. Время финиша будет «Среда, 31 декабря, 19:00:00 по восточному стандартному времени 1969 года». - person New Coder; 19.07.2015