Счетчики Hadoop: как получить доступ к объекту Reporter вне карты () и уменьшить () - PullRequest
2 голосов
/ 08 февраля 2011

Чтобы использовать счетчики, мне нужно иметь доступ к объекту Reporter.

Объект Reporter передается в качестве параметра для map () и lower (), поэтому я могу сделать: reporter.incrCounter (NUM_RECORDS, 1);

Но мне нужно использовать счетчики внутри класса MultipleOutputFormat (я использую метод generateFileNameForKeyValue)

Вопрос: как получить доступ к объекту Reporter внутри класса MultipleOutputFormat?

1 Ответ

1 голос
/ 08 февраля 2011

Вы можете создать свой собственный класс MultipleOutputFormat, MyMultipleOutputFormat (что-то вроде того, что вы делаете) и создать функцию, которая принимает Reporter (а также другие параметры), которая затем вызывает базуgenerateFileNameForKeyValue.

Если есть способ получить доступ к Job, откуда вам нужно его записать.Вы можете получить context из job (context.getConfiguration()) и затем увеличить счетчик (context.getCounter(YOUR_COUNTER.HERE).increment(1);)

Я не знаю вашей точной ситуации, но пытаюсь использовать счетчик внутри функцииэто должно действовать на / для одной записи, кажется ненужным и, вероятно, может быть сделано «снаружи», где доступ к Reporter / * 1015. * легок. Я могу ошибаться, и ваша ситуация / использование счетчика там необходимы,но я бы посоветовал проверить, действительно ли вам это нужно внутри этой функции, или это можно сделать и снаружи.

Редактировать: ответить на пару неясных моментов; Создание функции, которая принимаетa Reporter: так как вы расширяете MultipleOutputFormat, вы можете добавлять дополнительные функции. Если вы добавите определение функции generateFileNameForKeyValueAndTrack(K key, V value, String name, Reporter reporter), вы можете затем увеличить счетчик в этой функции и заставить ее вызывать generateFileNameForKeyValue, передавая key, value и name.

Использование счетчика внутри кажется ненужным: я предполагаю, что вы вызываете generateFileNameForKeyValue внутри функции map. Замените map на whatevЕсли это предположение неверно.Создайте коллекцию (не важно, какой тип, если она может выполнять то, что я описываю), в которой вы сохраняете сгенерированное имя файла.Каждый раз, когда генерируется имя файла, вы можете проверить, существует ли оно в коллекции, и увеличить соответствующий счетчик.Я вижу привлекательность делать это внутри функции generate..., чтобы избежать дублирования данных, так что я бы (вне головы), вероятно, занялся созданием дополнительной функции (указанной выше).

Iнадеюсь, это поможет прояснить то, что я предлагал.

Чтобы поддерживать нормальное общение (и меня уведомляли), если у вас есть комментарии / вопросы, касающиеся этого поста, используйте добавление комментария к этому посту вместо добавления ответа..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...