Как найти процессорное время, затрачиваемое задачей Map/Reduce в Hadoop

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

Я знаю это:

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

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


person reddragon    schedule 20.02.2012    source источник


Ответы (2)


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

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

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

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

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

person Thomas Jungblut    schedule 20.02.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. Я также написал скрипт для сбора совокупного процессорного времени: https://gist.github.com/1984365. Перед запуском задания необходимо убедиться, что вы выполнили:

rm -rf logs/userlogs/*

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

person reddragon    schedule 06.03.2012