Подтвердить что ты не робот

Сокращенное/несогласованное имя счетчика Hadoop

На данный момент у меня есть работа 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 имеет ограничения на имя счетчика max, и этот идентификатор настроек mapreduce.job.counters.counter.name.max предназначен для настройки этого ограничения. Поэтому я увеличил это значение до 500, и веб-интерфейс теперь показывает полное имя счетчика. Но getName() счетчика по-прежнему возвращает усеченное имя.

Может ли кто-нибудь объяснить это или указать мне на мои ошибки? Спасибо.

ОБНОВЛЕНИЕ 1

Моя конфигурация сервера Hadoop состоит из одного сервера с HDFS, YARN и map-Reduction на нем. Во время уменьшения карты есть некоторые приращения счетчиков, и после завершения задания в 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. Некоторые интересные вещи:

  1. Метод org.apache.hadoop.mapred.ClientServiceDelegate#getJobCounters возвращает несколько счетчиков из пряжи с TRUNCATED-именами и FULL-отображаемыми именами.
  2. Не удалось отладить карты и редукторы самостоятельно, но с помощью логирования кажется, что метод org.apache.hadoop.mapreduce.Counter#getName работает правильно во время выполнения редуктора.
4b9b3361

Ответ 1

getName() кажется устаревшим

В качестве альтернативы можно использовать getUri() с максимальной длиной по умолчанию 255.

Documentation link: getUri()

Не пробовал лично, но, похоже, это является возможным решением этой проблемы.