Hadoop截断/不一致的计数器名称

mr.*_*ing 78 java hadoop mapreduce hadoop-yarn

现在,我有一个Hadoop工作,它创建了一个非常有名的计数器.例如,以下一个:stats.counters.server-name.job.job-name.mapper.site.site-name.qualifier.qualifier-name.super-long-string-which-is-not-within-standard-limits.此计数器在Web界面和getName()方法调用上被截断.我发现Hadoop对计数器最大名称有限制,此设置ID mapreduce.job.counters.counter.name.max用于配置此限制.所以我将此增加到,500并且web界面现在显示完整的计数器名称.但是getName()计数器仍然返回截断的名称.

请问某人,解释一下或指出我的错误?谢谢.

编辑1

我的hadoop服务器配置由单个服务器组成,其中包含hdfs,yarn和map-reduce.在map-reduce期间,有一些计数器增量,在作业完成后,在ToolRunnerI中使用的获取计数器org.apache.hadoop.mapreduce.Job#getCounters.

编辑2

Hadoop版本如下:

Hadoop 2.6.0-cdh5.8.0
Subversion http://github.com/cloudera/hadoop -r 042da8b868a212c843bcbf3594519dd26e816e79 
Compiled by jenkins on 2016-07-12T22:55Z
Compiled with protoc 2.5.0
From source with checksum 2b6c319ecc19f118d6e1c823175717b5
This command was run using /usr/lib/hadoop/hadoop-common-2.6.0-cdh5.8.0.jar
Run Code Online (Sandbox Code Playgroud)

我做了一些额外的调查,似乎这个问题描述了与我类似的情况.但这很令人困惑,因为我可以增加计数器的数量而不是计数器名称的长度......

编辑3

今天我花了很多时间调试hadoop的内部.一些有趣的东西:

  1. org.apache.hadoop.mapred.ClientServiceDelegate#getJobCounters方法从具有TRUNCATED名称和FULL显示名称的yarn返回一组计数器.
  2. 无法调试map和reducer本身,但在记录的帮助下,似乎该org.apache.hadoop.mapreduce.Counter#getName方法在reducer执行期间正常工作.

小智 1

getName()似乎已被弃用

或者,getUri()可以使用默认最大长度 255。

文档链接:getUri()

还没有亲自尝试过,但这似乎是解决此问题的可能方法。