我想从映射器外部向 hadoop 计数器添加一些东西。所以,我想像这样访问上下文对象上的 getCounter:
context.getCounter(counter, key).increment(amount)
我无法从我开始工作的地方获取上下文对象。我只能做
job.getCounters().findCounter()
这不允许我向 hadoop 计数器添加一些东西。
我想从映射器外部向 hadoop 计数器添加一些东西。所以,我想像这样访问上下文对象上的 getCounter:
context.getCounter(counter, key).increment(amount)
我无法从我开始工作的地方获取上下文对象。我只能做
job.getCounters().findCounter()
这不允许我向 hadoop 计数器添加一些东西。
您只能在 mapper/reducer 任务中使用/写入计数器。作业跟踪器内置了与计数器交互的功能,您真的不想干扰已经很复杂的设置。
几个月前我遇到了这个问题,试图使用计数器来存储临时信息,但我决定将我需要的信息写入定义的 hdfs 目录并在我的工作完成后读取它。
编辑:为什么和你想在映射器之外使用计数器?
编辑#2:如果你想要完成工作的统计数据,那么计数器不是适合的地方,因为a)一旦工作跟踪器完成收集数据,它们似乎就不可写了,b)它们打算被使用用于跨任务聚合指标。我最近有类似的需求,最终在作业设置类(在我的边缘节点上)中进行了统计汇总,然后将数据写入日志。