我没有看到在开始时设置MapReduce作业计数器值的直接方法?此外,映射/归约任务中的计数器增量是原子操作吗?
设置计数器值是什么意思 - 你的意思是在 0 以外的位置初始化计数器值(你这样做的用例是什么?
至于原子操作,计数器是为每个任务单独累积的。任务完成时,计数器值将提交到全局总计(仅提交已提交的任务,因此,如果有两个任务以推测方式运行,则仅提交成功的任务计数器。
在创建计数器时设置值,如下所示:
private AtomicInteger pages = new AtomicInteger(0); // total pages fetched
或者,如果您想稍后在某个时候执行此操作,请在循环中使用incrCounter()
方法。(第一个更好。
计数器由与其关联的任务维护,并定期维护发送到任务跟踪器,然后发送到作业跟踪器,以便它们可以全局聚合。因此,每个映射任务/归约任务都有自己的计数器变量副本。如果作业成功,则会生成所有计数器的总数,并在输出摘要中提供。