hadoop1.x里面用于统计的计数器是Reporter累,在2.x中统一用Context类,此时需要调用下面的API进行统计:
例子:
public class test extends Configured implements Tool {
enum BadRecord{
BAD_UNIQUEID,
BAD_WIDTH,
BAD_HEIGHT,
BAD_PV
};
public static class mapper extends Mapper<LongWritable, Text, DoubleWritable, Text> {
@Override
protected void setup(Context context) throws IOException,InterruptedException {
super.setup(context);
}
public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
parser.parse(value);
boolean bvUniqueId = parser.isValidUniqueId();
boolean bvWidth = parser.isValidWidth();
boolean bvHeight = parser.isValidHeight();
if(bvUniqueId && bvWidth && bvHeight){
context.write(new DoubleWritable(getAreaFeature(parser.getWidth(), parser.getHeight())),
new Text("" + parser.getUrl() + " " +parser.getWidth()+" "+parser.getHeight()));
}else if(!bvWidth){
context.getCounter(BadRecord.BAD_WIDTH).increment(1);
}else if(!bvHeight){
context.getCounter(BadRecord.BAD_HEIGHT).increment(1);
}else if(!bvUniqueId){
context.getCounter(BadRecord.BAD_UNIQUEID).increment(1);
}
}
}
}