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



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

我知道:

  • TaskInProgress类维护execStartTime和execFinishTime值,这两个值是进程开始和结束时的墙上时钟时间,但它们不能准确指示任务消耗的CPU时间。

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

我使用的库记录资源指标,如CPU使用率/IIDLE时间、交换使用率和内存使用率。

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

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

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

我确信这个方法也会返回挂钟的时间。

为了子孙后代,我在572 行对src/mapred.org/apache/hadop/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/*

从而使脚本工作。

相关内容

  • 没有找到相关文章

最新更新