Pour l'instant, j'ai un travail Hadoop qui crée des compteurs avec un assez grand nom.
Par exemple, le suivant: stats.counters.server-name.job.job-name.mapper.site.site-name.qualifier.qualifier-name.super-long-string-which-is-not-within-standard-limits
. Ce compteur est tronqué sur l'interface Web et sur l'appel de méthode getName()
. J'ai découvert que Hadoop a des limites sur le nom max du compteur et cet identifiant de paramètres mapreduce.job.counters.counter.name.max
Sert à configurer cette limite. J'ai donc incrémenté ceci à 500
Et l'interface Web affiche maintenant le nom complet du compteur. Mais getName()
du compteur renvoie toujours le nom tronqué.
Quelqu'un pourrait-il, s'il vous plaît, expliquer cela ou me signaler mes erreurs? Je vous remercie.
EDIT 1
Ma configuration de serveur Hadoop se compose d'un serveur unique avec HDFS, YARN et se réduit lui-même sur la carte. Pendant la réduction de carte, il y a quelques incréments de compteur et une fois le travail terminé, dans ToolRunner
je récupère les compteurs en utilisant org.Apache.hadoop.mapreduce.Job#getCounters
.
EDIT 2
La version Hadoop est la suivante:
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
J'ai fait une enquête supplémentaire et il semble que ce problème décrit une situation similaire à la mienne. Mais c'est assez déroutant car je peux augmenter le nombre de compteurs mais pas la longueur du nom du compteur ...
EDIT 3
Aujourd'hui, j'ai passé pas mal de temps à déboguer les composants internes de Hadoop. Quelques trucs intéressants:
org.Apache.hadoop.mapred.ClientServiceDelegate#getJobCounters
Renvoie un tas de compteurs de fil avec des noms [~ # ~] tronqués [~ # ~] et [~ # ~] pleins [~ # ~] afficher les noms.org.Apache.hadoop.mapreduce.Counter#getName
Fonctionne correctement pendant l'exécution du réducteur.getName()
semble obsolète
Alternativement, getUri()
fournie avec une longueur maximale par défaut de 255 peut être utilisée.
Lien de documentation:
getUri()
Je ne l'ai pas essayé personnellement, mais cela semble être une solution possible à ce problème.