0

我定义了以下计数器

static enum BadRecordCounters
{
    NO_CREATION_DATE, UNKNOWN_USER_ID, UNPARSEABLE_RECORD, UNTAGGED_POSTS
}

它们显示如下

14/05/06 21:43:06 INFO mapred.JobClient:   com.aravind.learning.hadoop.mapred.techtalks.StackoverflowDataWranglerMapper$BadRecordCounters
14/05/06 21:43:06 INFO mapred.JobClient:     UNKNOWN_USER_ID=93
14/05/06 21:43:06 INFO mapred.JobClient:     UNTAGGED_POSTS=2461

我想知道是否有一种机制可以为这些使用替代文本。例如,我希望将计数器组读取为坏记录计数器而不是 FQCN。

4

2 回答 2

3

Map Reduce 允许您通过属性文件修改程序中指定的计数器的标签。

权威指南有一个名为“可读计数器名称”的部分涉及此主题。

我只是在这里复制相关部分

提供可读名称的方法如下。创建一个以枚举命名的属性文件,使用下划线作为嵌套类的分隔符。属性文件应与包含枚举的顶级类位于同一目录中。对于示例 8-1 中的计数器,该文件名为 MaxTemperatureWithCounters_Temperature.properties。

属性文件应包含一个名为 CounterGroupName 的属性,其值是整个组的显示名称。那么枚举中的每个字段都应该有一个为其定义的相应属性,其名称为以 .name 为后缀的字段名称,其值为计数器的显示名称。

MaxTemperatureWithCounters_Temperature.properties:
CounterGroupName=Air Temperature Records
MISSING.name=Missing
MALFORMED.name=Malformed

属性文件应与包含枚举的顶级类位于同一目录中。

于 2014-05-07T05:52:43.443 回答
2

你可以使用这个函数来增加你的计数器:

context.getCounter("PrettyGroupName", BadRecordCounters.NO_CREATION_DATE.name()).increment(1);
于 2014-05-07T08:10:27.607 回答