java - exemple - Nom du compteur tronqué/incohérent Hadoop



mapreduce example java (1)

Pour l'instant, j'ai un travail Hadoop qui crée des compteurs avec un assez grand nom.

Par exemple, la suivante: 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 la méthode getName() . J'ai découvert que Hadoop avait des limites sur le nom maximal du compteur et que ces paramètres, id mapreduce.job.counters.counter.name.max à 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 retourne 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

La configuration de mon serveur Hadoop consiste en un serveur unique avec HDFS, YARN et map-reduction lui-même. Lors de la réduction de la carte, il existe des incréments de compteurs et une fois le travail terminé, dans ToolRunner je récupère des compteurs à l'aide de org.apache.hadoop.mapreduce.Job#getCounters .

EDIT 2

La version de 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 des recherches supplémentaires et il semble que ce problème décrit une situation similaire à la mienne. Mais c'est assez déroutant parce que je peux augmenter le nombre de jetons mais pas la longueur du nom du compteur ...

EDIT 3

Aujourd'hui, j'ai passé pas mal de temps à déboguer les éléments internes de Hadoop. Quelques trucs intéressants:

  1. org.apache.hadoop.mapred.ClientServiceDelegate#getJobCounters méthode org.apache.hadoop.mapred.ClientServiceDelegate#getJobCounters renvoie un ensemble de compteurs provenant d'un fil avec des noms TRUNCATED et FULL .
  2. Impossible de déboguer les cartes et les réducteurs, 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.

getName() semble être obsolète

Vous pouvez également getUri() dont la longueur maximale par défaut est de 255.

Lien vers la documentation: getUri()

Je n'ai pas essayé personnellement, mais cela semble être une solution possible à ce problème.