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.maxsłuży do konfigurowania tego limitu. Więc zwiększyłem to do 500i 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 ToolRunnerpobieram 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#getJobCountersMetoda 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#getNamemetoda 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.)