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