Na razie mam zadanie Hadoop, które tworzy liczniki o dość dużej nazwie.
Na przykład, na następujący: stats.counters.server-name.job.job-name.mapper.site.site-name.qualifier.qualifier-name.super-long-string-which-is-not-within-standard-limits
. Ten licznik jest obcinany w interfejsie WWW i getName()
wywołaniu metody. Dowiedziałem się, że Hadoop ma ograniczenia dotyczące nazwy maksymalnej licznika i ten identyfikator ustawień mapreduce.job.counters.counter.name.max
służy do konfigurowania tego limitu. Więc zwiększyłem to do 500
i interfejs sieciowy pokazuje teraz pełną nazwę licznika. Ale getName()
licznik nadal zwraca obciętą nazwę.
Czy ktoś mógłby to wyjaśnić lub wskazać mi moje błędy? Dziękuję Ci.
EDYCJA 1
Moja konfiguracja serwera Hadoop składa się z jednego serwera z HDFS, YARN i map-Redred. Podczas zmniejszania mapy jest kilka przyrostów liczników, a po zakończeniu zadania ToolRunner
pobieram liczniki za pomocą org.apache.hadoop.mapreduce.Job#getCounters
.
EDYCJA 2
Wersja Hadoop jest następująca:
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
Zrobiłem dodatkowe dochodzenie i wydaje się, że ten problem dotyczy sytuacji podobnej do mojej. Ale to dość zagmatwane, ponieważ jestem w stanie zwiększyć liczbę liczników, ale nie długość nazwy licznika ...
EDYCJA 3
Dzisiaj spędziłem dużo czasu na debugowaniu wewnętrznych elementów Hadoop. Kilka interesujących rzeczy:
org.apache.hadoop.mapred.ClientServiceDelegate#getJobCounters
Metoda zwraca kilka liczników z przędzy ze ściętego nazw i PEŁNYCH nazw wyświetlanych.- Nie był w stanie samodzielnie debugować map i reduktorów, ale przy pomocy logowania wydaje się, że
org.apache.hadoop.mapreduce.Counter#getName
metoda działa poprawnie podczas wykonywania reduktora.
getName()
połączenia, które nadal zwraca skróconą nazwę? Czy jest to iteracja liczników zwróconychJob#getCounters()
przez klienta przesyłającego po oczekiwaniu na zakończenie zadania, czy jest to oddzielna aplikacja odpytująca liczniki z serwera historii zadań, czy też coś zupełnie innego? Spodziewałbym się, że twoja konfiguracja będzie wystarczająca. Interfejs użytkownika sieci Web używa tego samegogetName()
wywołania. (Nie naprawiłoby to jednak z mocą wsteczną skróconych nazw liczników z zadań przesłanych przed zmianą konfiguracji.)