2015-07-19 9 views
1

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

Возможно, 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.

+0

Почему часы перекоса имеет значения, если вы просто вычислить 'FinishTime - StartTime', она измеряется на том же хосте. –

+0

Да, согласен с этим. Но причина, по которой перекос - это то, что я хочу узнать истекшее время для текущих запущенных задач. В случае выполнения текущих задач getFinishTime() вернет значение «Wed Dec 31 19:00:00 EST 1969» в качестве значения по умолчанию. –

+0

Это не совсем возможно. Я боюсь. Лучшее, что вы можете сделать, это действительно использовать часы клиента. –

ответ

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!"); 
} 
+0

Как указано в комментариях для уточнения вопроса, это может не сработать, если задача все еще находится в рабочем состоянии. Окончательный вариант, для которого будет «Ср. 31 декабря 19:00:00 по восточному времени 1969 года». –