Im Moment habe ich einen Hadoop-Job, der Zähler mit einem ziemlich großen Namen erstellt.
Zum Beispiel die folgende : stats.counters.server-name.job.job-name.mapper.site.site-name.qualifier.qualifier-name.super-long-string-which-is-not-within-standard-limits
. Dieser Zähler wird auf der Weboberfläche und beim getName()
Methodenaufruf abgeschnitten . Ich habe herausgefunden, dass Hadoop Einschränkungen für den Zählermaximalnamen hat und diese Einstellungs-ID mapreduce.job.counters.counter.name.max
dient zum Konfigurieren dieser Grenze. Also habe ich dies erhöht 500
und das Webinterface zeigt jetzt den vollständigen Zählernamen an. Aber getName()
der Zähler gibt immer noch einen abgeschnittenen Namen zurück.
Könnte jemand dies bitte erklären oder mich auf meine Fehler hinweisen? Vielen Dank.
BEARBEITEN 1
Meine Hadoop-Serverkonfiguration besteht aus einem einzelnen Server mit HDFS, YARN und Map-Reduction. Während der Kartenreduzierung gibt es einige Zählerinkremente und nach Abschluss des Jobs werden ToolRunner
Zähler mit der Verwendung von abgerufen org.apache.hadoop.mapreduce.Job#getCounters
.
BEARBEITEN 2
Die Hadoop-Version ist die folgende:
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
Ich habe einige zusätzliche Untersuchungen durchgeführt und es scheint, dass dieses Problem eine ähnliche Situation wie ich beschreibt. Aber es ist ziemlich verwirrend, weil ich die Anzahl der Zähler erhöhen kann, aber nicht die Länge des Zählernamens ...
BEARBEITEN 3
Heute habe ich ziemlich viel Zeit damit verbracht, Interna des Hadoop zu debuggen. Einige interessante Sachen:
org.apache.hadoop.mapred.ClientServiceDelegate#getJobCounters
Die Methode gibt eine Reihe von Zählern aus Garn mit TRUNCATED- Namen und FULL- Anzeigenamen zurück.- Konnte Maps und Reduzierer selbst nicht debuggen, aber mit Hilfe der Protokollierung scheint die
org.apache.hadoop.mapreduce.Counter#getName
Methode während der Ausführung des Reduzierers korrekt zu funktionieren.
getName()
Anruf angeben, bei dem der abgeschnittene Name noch zurückgegeben wird? Durchläuft dies die Zähler, die vom übergebendenJob#getCounters()
Client zurückgegeben wurden, nachdem auf den Abschluss des Jobs gewartet wurde, oder handelt es sich um eine separate Anwendung, die Zähler vom Jobverlaufsserver abfragt, oder handelt es sich um etwas ganz anderes? Ich würde erwarten, dass Ihre Konfiguration ausreichend ist. Die Web-Benutzeroberfläche verwendet denselbengetName()
Aufruf. (Es würde jedoch nicht rückwirkend abgeschnittene Zählernamen von Jobs korrigieren, die vor der Konfigurationsänderung gesendet wurden.)