На даний момент у мене є робота Hadoop, яка створює лічильники з досить відомим ім’ям.
Так , наприклад, наступний: stats.counters.server-name.job.job-name.mapper.site.site-name.qualifier.qualifier-name.super-long-string-which-is-not-within-standard-limits
. Цей лічильник усічений у веб-інтерфейсі та під час getName()
виклику методу. Я виявив, що Hadoop має обмеження на ім'я лічильника, і цей ідентифікатор налаштувань mapreduce.job.counters.counter.name.max
призначений для налаштування цього обмеження. Тож я збільшив це до, 500
і веб-інтерфейс тепер показує повне ім’я лічильника. Але getName()
з лічильника все одно повертається усічене ім'я.
Чи може хтось, будь ласка, пояснити це чи вказати мені на мої помилки? Дякую.
РЕДАГУВАТИ 1
Моя конфігурація сервера Hadoop складається з єдиного сервера з HDFS, YARN та карто-зменшенням на ньому. Під час зменшення карти є кілька приростів лічильника, і після завершення завдання, ToolRunner
я отримую лічильники з використанням org.apache.hadoop.mapreduce.Job#getCounters
.
РЕДАГУВАТИ 2
Версія Hadoop така:
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
Я провів додаткове розслідування, і, схоже, це питання описує ситуацію, подібну до моєї. Але це досить заплутано, бо я можу збільшити кількість лічильників, але не довжину імені лічильника ...
РЕДАГУВАТИ 3
Сьогодні я витратив досить багато часу на налагодження внутрішніх елементів Hadoop. Кілька цікавих речей:
org.apache.hadoop.mapred.ClientServiceDelegate#getJobCounters
Метод повертає купу лічильників з пряжі з обрізаними іменами та ПОВНИМИ відображуваними іменами.- Не вдалося самостійно налагодити карти та редуктори, але за допомогою реєстрації здається, що
org.apache.hadoop.mapreduce.Counter#getName
метод працює належним чином під час виконання редуктора.
getName()
дзвінок, який все одно повертає усічене ім'я? Це ітерація над лічильниками, повернутими зJob#getCounters()
клієнта, що подає заявку, після очікування завершення роботи, чи це окрема програма, яка запитує лічильники із сервера історії роботи, чи це щось інше? Я би очікував, що ваша конфігурація буде достатньою. Веб-інтерфейс використовує той самийgetName()
виклик. (Однак це не призведе до зворотного виправлення усічених назв лічильників із завдань, поданих до зміни конфігурації.)