在 Hadoop 中,我们可以在 Map/Reduce 任务中递增计数器,如下所示:
...
context.getCounter(MyCountersEnum.SomeCounter).increment(1);
...
您可以在日志中找到它们的值。
作业完成后如何从代码访问它们?
读取计数器值的 Hadoop API 是什么?
计数器代表全局计数器,由 Map-Reduce 框架或应用程序定义。
每个计数器可以是任何枚举类型。
您可以在 Driver 类中将计数器定义为枚举
static enum UpdateCount{
CNT
}
然后增加map/reduce任务中的计数器
public class CntReducer extends Reducer<IntWritable, Text, IntWritable, Text>{
public void reduce(IntWritable key,Iterable<Text> values,Context context) {
//do something
context.getCounter(UpdateCount.CNT).increment(1);
}
}
并在 Driver 类中访问它们
public int run(String[] args) throws Exception {
.
.
.
job.setInputFormatClass(TextInputFormat.class);
job.setOutputFormatClass(TextOutputFormat.class);
FileInputFormat.setInputPaths(job,in );
FileOutputFormat.setOutputPath(job, out);
job.waitForCompletion(true);
c = job.getCounters().findCounter(UpdateCount.CNT).getValue();
//Print "c"
}
}
c给出计数器值。
你可以找个例子here
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)