MapReduce计数器奇怪的输出

时间:2018-06-05 18:53:55

标签: hadoop mapreduce hadoop2

我有一个简单的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);
}

0 个答案:

没有答案