web-dev-qa-db-fra.com

Nom de compteur Hadoop tronqué / incohérent

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:

  1. La méthode org.Apache.hadoop.mapred.ClientServiceDelegate#getJobCounters Renvoie un tas de compteurs de fil avec des noms [~ # ~] tronqués [~ # ~] et [~ # ~] pleins [~ # ~] afficher les noms.
  2. N'a pas pu déboguer les cartes et les réducteurs lui-même, mais avec l'aide de la journalisation, il semble que la méthode org.Apache.hadoop.mapreduce.Counter#getName Fonctionne correctement pendant l'exécution du réducteur.
78
mr.nothing

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.

1
Akash G