如何在Hadoop中找到Map/Reduce任务占用的CPU时间

如何在Hadoop中找到Map/Reduce任务占用的CPU时间,hadoop,mapreduce,scheduling,Hadoop,Mapreduce,Scheduling,我正在编写一个Hadoop调度程序。我的调度需要查找每个Map/Reduce任务所占用的CPU时间 我知道: TaskInProgress类维护execStartTime和execFinishTime值,这是进程启动和完成时的挂钟时间,但它们不能准确指示任务消耗的CPU时间 每个任务都在一个新的JVM中执行,我可以使用OperatingSystemMXBean。()方法,但该方法的描述再次告诉我:“返回Java虚拟机运行的进程使用的CPU时间(以纳秒为单位)”。我不完全清楚这是否是我想要的 我

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

我知道:

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

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


我正在使用一个记录资源指标(如CPU使用率/空闲时间、交换使用率和内存使用率)的库

您必须提取修补程序并将其应用于20.2标记版本

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

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

为了子孙后代,我在第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时间: 在运行作业之前,您需要确保:

rm -rf logs/userlogs/*
这样脚本就可以工作了