我有一份 Hadoop 工作,并自己定义了几个计数器。当我运行这个作业(地图数量 > 500)时,我发现一些地图任务丢失了用户定义的计数器,但 Hadoop 内置计数器(如地图输入记录)工作正常。该问题在某些 DataNode 上随机发生。这令人困惑。那么问题是什么?
问问题
466 次
1 回答
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
}
您的行处理可能会引发异常,从而绕过增量逻辑。
于 2012-11-27T23:43:54.007 回答