Как узнать время процессора, затраченное на задачу Map / Reduce в Hadoop - PullRequest
0 голосов
/ 20 февраля 2012

Я пишу планировщик Hadoop. Мое планирование требует определения процессорного времени, затрачиваемого каждой задачей Map / Reduce.

Я знаю, что:

  • Класс TaskInProgress поддерживает значения execStartTime и execFinishTime, которые являются настенными часами, когда процесс начинался и заканчивался, но они не точно указывают время ЦП, потребляемое задачей.

  • Каждая задача выполняется в новой JVM, и я мог бы использовать метод OperatingSystemMXBean. getProcessCpuTime (), но снова описание метода говорит мне: «Возвращает время процессора, используемое процесс, на котором виртуальная машина Java работает в наносекундах ". Мне не совсем понятно, хочу ли я этого.

Ответы [ 2 ]

0 голосов
/ 06 марта 2012

Просто для потомков я решил эту проблему, внеся изменения в src / mapred / org / apache / hadoop / mapred / TaskLog.java (Hadoop 0.20.203) в строке 572

mergedCmd.append("exec setsid 'time' ");    // add 'time'

Время ЦП будет записываться в: logs / userlogs / JOBID / TASKID / stderr. Я также написал скрипт, чтобы пожинать накопленное время процессора: Перед выполнением задания убедитесь, что вы выполнили:

rm -rf logs/userlogs/*

чтобы скрипт работал.

0 голосов
/ 20 февраля 2012

Я использую библиотеку, которая записывает метрики ресурсов, такие как загрузка ЦП / время IDLE, использование подкачки и использование памяти.

http://code.google.com/p/hadoop-toolkit/

Вы должны извлечь патч и применить его к версии тега 20.2.

I am not entirely clear if this is what I want.

Я почти уверен, что этот метод также возвращает время настенных часов.

...