Почему Partitioner вызывается даже с одним редуктором
Если у нас есть задание MR, настроенное для работы только с одним редуктором, кажется логичным, что Partitioner не нужно вызывать.
Однако я только что сделал это, и похоже, что Partitioner вызывается, даже если задание настроено с одним редуктором.
Любые идеи, почему это потребуется?
2 ответа
Это связано с тем, что за назначение пары ключ / значение определенному преобразователю отвечает класс, играющий роль разделителя. Даже если есть только один редуктор, вам все равно нужен разделитель, чтобы назначить пары ключ / значение этому одному редуктору.
Наличие любых значений по умолчанию или логики if-there-only-one-reducer эффективно распределяет поведение назначения раздела по местам за пределами разделителя, что на самом деле не является хорошим дизайном OO.
В большинстве случаев не вызывать разделитель будет то же самое, что вызывать его, даже если у вас есть только 1 редуктор. Но что, если возникло исключение или произошел сбой программы по другой причине, то, если не вызывать разделитель, можно скрыть ошибку в вашей программе, при условии, что это немного надумано, потому что, скорее всего, любую ошибку, найденную в разделителе, будет легко найти в другом месте. Так как звонить по телефону очень мало, нет никаких причин не звонить, и в действительности нет никакого смысла не звонить.