如何在Hadoop中找到Map/Reduce任务占用的CPU时间
我正在编写一个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时间(以纳秒为单位)”。我不完全清楚这是否是我想要的 我
- TaskInProgress类维护execStartTime和execFinishTime值,这是进程启动和完成时的挂钟时间,但它们不能准确指示任务消耗的CPU时间
- 每个任务都在一个新的JVM中执行,我可以使用OperatingSystemMXBean。()方法,但该方法的描述再次告诉我:“返回Java虚拟机运行的进程使用的CPU时间(以纳秒为单位)”。我不完全清楚这是否是我想要的
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/*
这样脚本就可以工作了