Что означает процессорное время для задания Hadoop?

Боюсь, я не понимаю, каковы временные результаты работы Map-Reduce. Например, работа, которую я выполняю, дает мне следующие результаты от трекера работы.

Закончено в: 1мин, 39сек

Затраченное время (мс) 150 460 152 030 302 490

Записи в затраченном времени процессора (мс) предназначены для Map, Reduce и Total соответственно. Но тогда как измеряется "затраченное время процессора" и что это означает? Это общее совокупное время, проведенное в каждом из картографов и редукторов, назначенных для работы? Можно ли измерить другое время из фреймворка, например, время для перемешивания, сортировки, разбиения и т. Д.? Если так, то как?

Второй вопрос, который меня беспокоит. Я видел несколько постов здесь ( Link1, Link2), которые предлагают использовать getTime() в классе драйвера:

long start = new Date().getTime();
boolean status = job.waitForCompletion(true);
long end = new Date().getTime();
System.out.println("Job took "+(end-start) + "milliseconds");

Разве это не делает то, что обеспечивает первая запись в выводе Job Tracker? Это необходимо? Каков наилучший способ рассчитать время работы hadoop, особенно когда я хочу рассчитать время ввода-вывода, вычислить время на узел / этап?

1 ответ

Фаза карты состоит из: читателя записи, карты, объединителя и разделителя.

Фаза сокращения состоит из: перемешать, отсортировать, уменьшить, вывести.

Время ЦП, которое вы видите здесь, относится ко всей фазе карты и всей фазе сокращения... а не только к самой функции. Это довольно запутанная терминология, потому что у вас есть функция map и функция Reduction, которые являются лишь частью фазы карты и фазы сокращения. Это общее время процессора на всех узлах кластера.

Процессорное время сильно отличается от реального времени. Процессорное время - это то, сколько времени что-то потратило на процессоры, в то время как реальное время - это то, что мы с вами переживаем как люди. Подумайте об этом: предположим, что вы выполняете одно и то же задание на тех же данных, но в одном кластере из 20 узлов, а затем в кластере из 200 узлов. В целом, одинаковое количество процессорного времени будет использоваться в обоих кластерах, но кластер из 200 узлов будет работать в 10 раз быстрее в реальном времени. Процессорное время является полезным показателем, когда у вас есть общая система, в которой одновременно выполняется множество заданий.

Я не знаю, как бы вы погрузились глубже, чтобы получить процессорное время на каждом этапе. Использование таймера даты, вероятно, не то, что вы ищете.

Другие вопросы по тегам