Java 如何读取每个reduce任务的计数器(例如,输出记录的数量)

Java 如何读取每个reduce任务的计数器(例如,输出记录的数量),java,hadoop,mapreduce,Java,Hadoop,Mapreduce,我正在运行迭代hadoop/mapreduce作业来分析某些数据。 (apache hadoop版本1.1.0) 我需要知道每个reduce任务的输出记录数,以便运行M/R作业的下一次迭代。 我可以在每次M/R作业后读取合并计数器,但我找不到单独读取每个任务计数器的方法。 关于这一点,请给我一些建议 Choi计数器不是这样工作的:每个任务都将其度量报告给一个中心点,因此无法从单个任务中了解计数器值 从这里开始: 可以使用旧MapReduce API的报告器或使用新MapReduce API的上下

我正在运行迭代hadoop/mapreduce作业来分析某些数据。 (apache hadoop版本1.1.0) 我需要知道每个reduce任务的输出记录数,以便运行M/R作业的下一次迭代。 我可以在每次M/R作业后读取合并计数器,但我找不到单独读取每个任务计数器的方法。 关于这一点,请给我一些建议


Choi

计数器不是这样工作的:每个任务都将其度量报告给一个中心点,因此无法从单个任务中了解计数器值

从这里开始:

可以使用旧MapReduce API的报告器或使用新MapReduce API的上下文来增加计数器。这些计数器被发送到TaskTracker,TaskTracker将发送到JobTracker,JobTracker将合并计数器以生成完整作业的整体视图。JobTracker不会将合并计数器中继回地图和Reduce任务。因此,Map和Reduce任务必须联系JobTracker以获取计数器的当前值


我想您可以创建一个特定于任务的计数器(例如,在计数器名称前加前缀),但最终会得到许多不同的计数器,而且,由于这些计数器设计得很轻,因此可能会遇到问题(尽管阈值水平相当高:我曾经测试过该限制,当我达到大约一百万个计数器时,节点崩溃!)

感谢您的建议。那么,获得相同信息的最佳替代方案是什么呢???完成后,可以将信息写入零件文件,并读取/合并所有类似零件文件(从公共位置)在开始下一次迭代之前,从作业外部开始。