有没有一种方法可以;“设置”;Hadoop计数器而不是递增它?

有没有一种方法可以;“设置”;Hadoop计数器而不是递增它?,hadoop,Hadoop,API仅提供在映射器或减缩器中增加计数器的方法。有什么方法可以直接设定它吗?或者只增加它的值一次,而不考虑映射器和还原器的运行次数。您试图实现什么?这本身就很棘手,如果多个映射器试图设置计数器会怎么样?谁应该赢?计数器通常只递增的原因是,架构可以非常、非常快速和高效地完成此操作。您无法设置计数器,因为计数器是从每个任务中求和的,并聚合到顶级计数器中 我在MapReduce作业中使用过任务间的小型通信或协调,或标记作业或任务中发生的某些事情。这不能从Hadoop API中完成,至少@orangeo

API仅提供在映射器或减缩器中增加计数器的方法。有什么方法可以直接设定它吗?或者只增加它的值一次,而不考虑映射器和还原器的运行次数。

您试图实现什么?这本身就很棘手,如果多个映射器试图设置计数器会怎么样?谁应该赢?计数器通常只递增的原因是,架构可以非常、非常快速和高效地完成此操作。

您无法设置计数器,因为计数器是从每个任务中求和的,并聚合到顶级计数器中


我在MapReduce作业中使用过任务间的小型通信或协调,或标记作业或任务中发生的某些事情。

这不能从Hadoop API中完成,至少@orangeoctupus也指出了这一点。
我用于实现这一点的方法是在作业的上下文属性中设置值。最后,可以在作业运行后读取属性。不优雅,但一个解决办法

接口org.apache.hadoop.mapreduce.Counter,但如果它像基于描述的那样在全球范围内工作,我会同意其他答案,即没有太多的用例也是好主意……

基本目的是将一条信息与作业运行相关联。是的,至少使用Hadoop API无法重置计数器。