现在,我有一个 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 对 counter max name 有限制,这个设置 id mapreduce.job.counters.counter.name.max
用于配置这个限制。所以我增加到 500
和 Web 界面现在显示完整的计数器名称。但是计数器的 getName()
仍然返回截断的名称。
有没有人能解释一下,或者指出我的错误? 谢谢。
编辑1
我的 Hadoop 服务器配置由单个服务器组成,其中包含 HDFS、 YARN 和 map-reduce 本身。在 map-reduce 过程中,有一些计数器增量,在作业完成之后,在 ToolRunner
中使用 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
我做了一些额外的调查,似乎 这个问题描述了一个类似于我的情况。但这是相当混乱的,因为我可以增加计数器的数量,但不计数器的名称的长度..。
编辑3
今天,我花了很多时间调试 Hadoop 的内部结构:
org.apache.hadoop.mapreduce.Counter#getName
方法可以在减速器执行期间正确工作。