所有
我有一个hadoop工作,并自己定义几个计数器。当我运行这个工作(地图数量> 500)时,我发现一些地图任务丢失了用户定义的计数器,但是hadoop内置计数器(如地图输入记录)工作正常。这个问题在一些datanode上随机出现。这令人困惑。 那有什么问题?
感谢。
答案 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
}
您的行处理可能会抛出异常,从而绕过增量逻辑。