我有一个简单的MapReduce程序,我试图测量map()和reduce()函数的执行时间而不是整个作业。我正在使用计数器来做到这一点。但是当我使用
检查任务级别日志时 yarn logs -applicationId application_xyz123
我为地图任务获得了两个自定义计数器,如下所示。
pa.abc.com.PlatformDefinedPhaseProfiler$MAP_RED_CUS
MAP_TIME_MILLIS=2372
REDUCE_TIME_MILLIS=1035
我希望只能看到地图自定义计数器,而不是减速器的计数器。在我的实现中,我不得不重写run方法来捕获setup()
和cleanup()
阶段。
我的mapper中的代码片段如下所示。
public void run(Context c) ... {
long startTime = System.currentTimeMillis();
setup(c);
while (c.nextKeyValue()) {
//Some code here
map(c.getCurrentKey(), c.getCurrentValue(), c);
}
cleanup(c);
long endTime = System.currentTimeMillis();
long totalTime = endTime-startTime;
c.getCounter(MAP_RED_CUS.MAP_TIME_MILLIS).increment(totalTime);
}
reducer中的代码片段如下。
public void run(Context c) ... {
long startTime = System.currentTimeMillis();
setup(c);
while (c.nextKeyValue()) {
//Some code here
map(c.getCurrentKey(), c.getCurrentValue(), c);
}
cleanup(c);
long endTime = System.currentTimeMillis();
long totalTime = endTime-startTime;
c.getCounter(MAP_RED_CUS.REDUCE_TIME_MILLIS).increment(totalTime);
}