Существует способ достижения этого (хотя, я считаю, что это не чистый путь).
Когда вы излучаете счетчик в картографе, вы можете получить идентификатор попытки задачи и префикс имени счетчика с этим.
См., Например, в map()
методы программы WordCount, за каждое слово встречается, я излучаемый:
context.getCounter("ME", context.getTaskAttemptID() + ":MY_TOTAL").increment(1);
Выше ME
противопоказана группа. Имя счетчика - это комбинация Task Attempt ID
и MY_TOTAL
.
См., Например, идентификаторы попыток задания карты обычно имеют форму: task_1450681906391_0024_m_000000_0
(m_000000_0
предназначен для первого картографа в задании).
Итак, ваше имя счетчика для этого картографа будет: task_1450681906391_0024_m_000000_0:MY_TOTAL
.
Точно так же счетчик название различных картографов будет:
Mapper 2 => task_1450681906391_0024_m_000001_0:MY_TOTAL
Mapper 3 => task_1450681906391_0024_m_000002_0:MY_TOTAL
Mapper 4 => task_1450681906391_0024_m_000003_0:MY_TOTAL
Теперь, в драйвере, я добавил следующий код, после установки Job::waitForCompletion(true)
:
job.waitForCompletion(true);
CounterGroup counters = job.getCounters().getGroup("ME");
Iterator<Counter> iter = counters.iterator();
while(iter.hasNext()) {
Counter c = iter.next();
System.out.println(c.getName() + " " + c.getValue());
}
Я запустил программу подсчета слов для 1 ГБ данных, которые породили 7 карт. После успешного выполнения программы, я получил следующий вывод:
attempt_1450681906391_0024_m_000000_0:MY_TOTAL 9318964
attempt_1450681906391_0024_m_000001_0:MY_TOTAL 9068018
attempt_1450681906391_0024_m_000002_0:MY_TOTAL 9241336
attempt_1450681906391_0024_m_000003_0:MY_TOTAL 9182102
attempt_1450681906391_0024_m_000004_0:MY_TOTAL 8948100
attempt_1450681906391_0024_m_000005_0:MY_TOTAL 8992634
attempt_1450681906391_0024_m_000006_0:MY_TOTAL 8564646
Вы можете увидеть, что счетчики для разных картографов выбрасываются отдельно. Вы можете легко разобрать картостроитель и получить счетчик для каждого преобразователя, как показано ниже:
Mapper 1 => MY_TOTAL 9318964
Mapper 2 => MY_TOTAL 9068018
Mapper 3 => MY_TOTAL 9241336
Mapper 4 => MY_TOTAL 9182102
Mapper 5 => MY_TOTAL 8948100
Mapper 6 => MY_TOTAL 8992634
Mapper 7 => MY_TOTAL 8564646
Вы можете фактически передать идентификатор задания и получить все счетчики в драйвере работы после того, как карта снижения завершена. –
Я дал ответ на этот вопрос. Проверьте, подходит ли оно вашим требованиям. –
@DurgaViswanathGadiraju: Не могли бы вы объяснить это по некоторому коду? –