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

时间:2014-08-08 08:19:12

标签: java hadoop mapreduce

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

2 个答案:

答案 0 :(得分:1)

你可以使用Jumbune的调试器,你可以在每个mapper / reducer上使用你自己的验证类和/ regex验证。 Jumbune对每个阶段和控制结构进行了很好的深入研究。

通过jumbune运行作业,它会为您提供通过映射器或减速器以及作业中每个控制结构的记录数量统计信息。您可以将更多内容应用于过滤进出阶段的记录,以便为您提供准确的视图。

答案 1 :(得分:0)

不是计数器如何工作:每个任务都将其指标报告给中心点,因此无法知道各个任务的计数器值。

从这里开始:http://www.thecloudavenue.com/2011/11/retrieving-hadoop-counters-in-mapreduce.html

  

可以使用旧MapReduce API的Reporter或使用New MapReduce API使用Context来增加计数器。这些计数器将发送到TaskTracker,TaskTracker将发送到JobTracker,JobTracker将合并计数器以生成完整作业的整体视图。 JobTracker不会将合并的计数器转发回Map和Reduce任务。因此,Map和Reduce任务必须联系JobTracker以获取Counter的当前值。

我想你可以创建一个特定于任务的计数器(例如,计数器名称的前缀),但是你会得到很多不同的计数器,而且,由于它们设计得很轻,你可能会运行问题(尽管阈值水平相当高:我曾经测试过极限,当我达到百万计数器时,节点崩溃了!)