如何在Hadoop中查找Map / Reduce任务所花费的CPU时间

时间:2012-02-20 17:44:16

标签: hadoop mapreduce scheduling

我正在编写Hadoop调度程序。我的调度需要查找每个Map / Reduce任务所花费的CPU时间。

我知道:

  • TaskInProgress类维护execStartTime和execFinishTime值,这些值是进程启动和结束时的挂钟时间,但它们并不能准确指示任务消耗的CPU时间。

  • 每个任务都在新的JVM中执行,我可以使用OperatingSystemMXBean。getProcessCpuTime()方法,但是方法的描述再次告诉我:“返回进程使用的CPU时间Java虚拟机以纳秒为单位运行“。如果这就是我想要的,我不完全清楚。

2 个答案:

答案 0 :(得分:0)

我正在使用一个库来记录资源指标,如CPU使用率/ IDLE时间,交换使用情况和内存使用情况。

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

您必须提取补丁并将其应用于20.2标记版本。

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

我很确定此方法也会返回挂钟时间。

答案 1 :(得分:0)

为了后人,我通过在第572行更改了src / mapred / org / apache / hadoop / mapred / TaskLog.java(Hadoop 0.20.203)来解决了这个问题

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

CPU时间将写入:logs / userlogs / JOBID / TASKID / stderr。我还写了一个脚本来获得累积的CPU时间:https://gist.github.com/1984365 在运行作业之前,您需要确保执行以下操作:

rm -rf logs/userlogs/*

以便脚本有效。