지금은 꽤 큰 이름의 카운터를 만드는 Hadoop 작업이 있습니다.
예를 들면 다음과 같습니다 stats.counters.server-name.job.job-name.mapper.site.site-name.qualifier.qualifier-name.super-long-string-which-is-not-within-standard-limits
.. 이 카운터는 웹 인터페이스 및 getName()
메서드 호출 에서 잘립니다 . Hadoop에는 카운터 최대 이름에 제한이 있으며이 설정 ID mapreduce.job.counters.counter.name.max
는이 제한을 구성하기위한 것임을 알았습니다 . 그래서 나는 이것을 증가 시켰고 500
웹 인터페이스는 이제 전체 카운터 이름을 보여줍니다. 그러나 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 표시 이름을 가진 실에서 카운터를 반환 합니다.- 지도와 감속기 자체를 디버그 할 수 없었지만 로깅의 도움으로
org.apache.hadoop.mapreduce.Counter#getName
감속기 실행 중에 메서드가 올바르게 작동 하는 것 같습니다 .
getName()
잘린 이름을 반환하는 호출 에 대해 더 자세한 정보를 제공해 주 시겠습니까?Job#getCounters()
작업 완료를 기다린 후 제출하는 클라이언트에서 반환 된 카운터를 반복합니까 , 아니면 작업 기록 서버에서 카운터를 쿼리하는 별도의 응용 프로그램입니까, 아니면 완전히 다른 것입니까? 귀하의 구성이 충분할 것으로 기대합니다. 웹 UI는 동일한getName()
호출을 사용합니다 . (그것은 소급하지만 구성이 변경되기 전에 제출 된 작업에서 카운터 이름을 잘립니다 해결되지 것입니다.)