运行hadoop作业时,某些映射会丢失用户定义的计数器

时间:2012-11-27 03:21:42

标签: map hadoop counter user-defined

所有

我有一个hadoop工作,并自己定义几个计数器。当我运行这个工作(地图数量> 500)时,我发现一些地图任务丢失了用户定义的计数器,但是hadoop内置计数器(如地图输入记录)工作正常。这个问题在一些datanode上随机出现。这令人困惑。 那有什么问题?

感谢。

1 个答案:

答案 0 :(得分:0)

使用try-catch块包装map()方法逻辑,并在catch块中增加另一个以异常消息命名的计数器:

@Override
public void map(ByteBuffer key,SortedMap<ByteBuffer, IColumn> value, Context context)
        throws IOException, InterruptedException {

    try {

        //  Map logic goes here.

        context.getCounter("Custom","Counter").increment(1);

    } catch (Exception e) {
        context.getCounter("Exception",e.getMessage()).increment(1);
    }
    // End map logic 

}

您的行处理可能会抛出异常,从而绕过增量逻辑。