2013-04-09 2 views
2

Предположим, что у нас есть 3 модуля (m1, m2 и m3) и 2 редуктора (r1 и r2).Размер выходных разделов карты?

Каждый редуктор извлекает свои входные разделы из сгенерированных файлов каждым устройством отображения.

Из истории заданий я могу извлечь общий ввод для каждой задачи уменьшения, , но я хотел бы знать вклад каждого преобразователя в этот вход редуктора?

Например, редуктор R1 получит INPUT_r1, такие как:

INPUT_r1 = (раздел извлекается из m1) + (раздел извлекается из м2) + (раздел извлекается из м3)

Я хотел бы узнать размер этих разделов от картографов?

ответ

0

Чтобы найти размер разделов с помощью карт, необходимо учитывать пару вещей.

Во-первых, мы должны понимать, что, в Hadoop, редактирования разделов выполняются перед комбайнеров, так что если у вас есть объединитель в вашей логике вам нужно будет объяснить это ... если это влияет на вашу попытку найти размер. Это актуально, если вы найдете размер другим способом, чем тот, который я предлагаю здесь.

Во-вторых, разделитель по умолчанию HashPartitioner присваивает примерно одинаковое количество ключей каждому редуктору. Используемый метод:

public int getPartition(K2 key, V2 value, int numReduceTasks) { 

    return (key.hashCode() & Integer.MAX_VALUE) % numReduceTasks; 
} 

Обратите внимание, что учитывает только разметка ключа и игнорирует значение, которое может способствовать неравномерному распределению данных, распространяемых с редукторами.

Что бы я сделал, чтобы узнать размер, установите счетчик рядом с вашим HashPartitioner или пользовательским разделителем и учтите, что размеры пары ключ-значение собираются каждым. Затем распечатайте это значение для каждого разделителя. Возможно, вам нужно будет отслеживать, где каждый раздел отправляет свои данные, поскольку сами разделители не имеют представления о том, кому они отправляют свои данные.

Об исследованиях по этому вопросу ссылаются от MapReduce Book

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