2015-07-15 4 views
2

В моем редукторе мне требуется общее количество «строк» ​​ввода, которые были обработаны картографами. входПолучить количество записей ввода в редукторе Hadoop

образца:

  • линия, 1, оф, вход
  • линия, 2, из, вход
  • линия, 3, оф, вход

Так, во всех Редукторов, мне нужно иметь доступ ко всему, что испускалось Mappers плюс общее количество строк (в данном случае 3).

Я предполагаю, что мне понадобится либо несколько заданий, либо цепь вместе с некоторыми преобразователями и/или редукторами, но я не уверен в правильном пути.

Примечание: Это не простая средняя программа, поэтому я не могу просто иметь один ключ от устройства отображения.

ответ

2

Что вам нужно здесь счетчик: https://hadoop.apache.org/docs/current/api/org/apache/hadoop/mapred/Counters.html

Hadoop предопределен набор стандартных счетчиков (включено количество перерабатываемой линии со стороны картографов, которая может быть то, что вы ищете), но вы также можете определите свой собственный счетчик. Вот пример того, как это сделать: Accessing a mapper's counter from a reducer

+0

Спасибо, это похоже на то, что мне нужно. –

0

Предполагая, что вы не указали пользовательские записи чтения, вам просто нужно, чтобы получить значение счетчика MAP_INPUT_RECORDS в методе вашего редуктора setup или configure (в зависимости от того, используете ли вы новый или старый API, соответственно).

См. this post и this post, для получения инструкций по API.

4

job.getCounters().findCounter(TaskCounter.MAP_INPUT_RECORDS).getValue(), чтобы получить общее количество записей.

Смежные вопросы