Выполняются ли Hadoop Mappers только локально?

У меня есть ситуация, когда целые блоки файла лежат на одном компьютере, а коэффициент репликации по умолчанию равен 1.

В этом сценарии, если я запускаю hadoop в своем кластере, я чувствую, что все мои задачи сопоставления будут выполняться только на одном компьютере, поскольку блоки присутствуют только на этом компьютере. Это правильно? Является ли выполнение задачи локального сопоставителя ограничением или просто приоритетом?
Если да, можно ли настроить таким образом, чтобы задачи сопоставления также выполнялись на других машинах путем копирования блоков на их локальные диски.?

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


person GoT    schedule 25.09.2013    source источник
comment
Предполагая, что у нас достаточно карты и уменьшаем слоты   -  person GoT    schedule 25.09.2013


Ответы (2)


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

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

person Piotr Kołaczkowski    schedule 25.09.2013
comment
Спасибо. Я думал, что копирование происходит только на этапе уменьшения. (Перетасовка). Итак, вы имеете в виду, что тот же самый блок данных будет скопирован и на нелокальные машины для выполнения задач карты, если есть слоты карты? - person GoT; 25.09.2013
comment
Да, входные данные для задачи карты будут скопированы в этом случае, и это намного менее эффективно, чем выполнение локально. - person Piotr Kołaczkowski; 25.09.2013

Фреймворк делает все возможное, чтобы обработка была как можно более локальной. Но могут быть случаи, когда этого не происходит. Одна из них - это, очевидно, отсутствие слота. Другой случай может быть, когда ваш InputSplit охватывает более 1 блока, и каждый блок находится на другом компьютере. В таком случае другая часть InputSplit будет перемещена на узел, где был инициирован Mapper для этого InputSplit, так что весь блок будет обработан 1 Mapper.

Является ли выполнение задачи локального картографа ограничением или просто приоритетом?

Это не ограничение. Просто чтобы сделать вещи более эффективными. В противном случае насколько неэффективно было бы перемещать ваши BigData отсюда туда, чтобы обработать их. И это один из основополагающих принципов Hadoop.

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

Почему ты бы так поступил? Если вы действительно хотите запускать Mappers на нескольких репликах одного и того же блока, вы можете переключить спекулятивное выполнение на true вместо копирования блока из одного места в другое. Это запустит несколько картографов в одном блоке на нескольких машинах, и вы получите результат через самый быстрый картограф.

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

Редукторы могут запускаться на любом узле со свободными слотами. Но не обязательно все машины.

person Tariq    schedule 25.09.2013