现在,我有一个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在计数器最大名称上有限制,此设置IDmapreduce.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.mapred.ClientServiceDelegate#getJobCounters
方法从TRUNCATED名称和FULL显示名称的yarn返回一堆计数器。- 无法调试地图和化简器本身,但在记录的帮助下,该
org.apache.hadoop.mapreduce.Counter#getName
方法似乎在化简器执行期间正常工作。
getName()
仍返回截断名称的呼叫的更多详细信息?这是Job#getCounters()
在等待作业完成之后对提交客户端中返回的计数器进行迭代,还是从作业历史服务器查询计数器的单独应用程序,还是完全其他?我希望您的配置足够。Web UI使用相同的getName()
调用。(尽管它不会追溯地修改配置更改之前提交的作业的截断计数器名称。)