Какова цель перетасовки и сортировки фазы в редукторе в Map Reduce Programming?


в карту уменьшить Программирование сократить этап перебирание, сортировка и сокращения по частям. Сортировка-дело дорогостоящее.

что цель тасовать и сортировать участок в редукторе в карте уменьшает программировать?

9 88

9 ответов:

в первую очередь shuffling это процесс передачи данных от картографов к редукторам, поэтому я думаю, что очевидно, что это необходимо для редукторов, так как в противном случае они не смогут иметь никакого ввода (или ввода от каждого картографа). Перетасовка может начаться еще до завершения фазы Карты, чтобы сэкономить некоторое время. Вот почему вы можете увидеть статус уменьшения больше 0% (но меньше 33%), когда статус карты еще не 100%.

Sorting сохраняет время для редуктора, помогая ему легко отличить, когда новая задача сокращения должна начаться. Он просто запускает новую задачу сокращения, когда следующий ключ в отсортированных входных данных отличается от предыдущего, проще говоря. Каждая задача reduce принимает список пар ключ-значение, но она должна вызывать метод reduce (), который принимает входной ключ-список(значение), поэтому он должен группировать значения по ключу. Это легко сделать, если входные данные предварительно отсортированы (локально) в фазе карты и просто объединяются-сортируются в фазе уменьшения (так как редукторы получают данные от многих картографов).

Partitioning, что вы упомянули в одном из ответов, - это другой процесс. Он определяет, в какой редуктор будет отправлена пара (ключ, значение), выход фазы карты. Разделитель по умолчанию использует хэширование ключей для распределения их по задачам сокращения, но вы можете переопределить его и использовать свой собственный пользовательский разделитель.

отличным источником информации для этих шагов является это Yahoo в учебнике.

хороший графическое представление этого выглядит следующим образом (shuffle называется "copy"на этом рисунке):

enter image description here

отметим, что shuffling и sorting не выполняются вообще, если вы указываете нулевые редукторы(setNumReduceTasks (0)). Затем задание MapReduce останавливается на фазе map, и фаза map не включает никакой сортировки (поэтому даже фаза map выполняется быстрее).

обновление: так как вы ищете что-то более официальное, вы также можете прочитать книгу Тома Уайта "Hadoop: The Definitive Guide". здесь это интересная часть для вашего вопроса.
Том Уайт был коммиттером Apache Hadoop с февраля 2007 года и является членом Apache Software Foundation, поэтому я думаю, что это довольно правдоподобно и официально...

давайте вернемся к ключевым фазам программы Mapreduce.

The фаза карте делается картографов. мапперы запуск на несортированных парах ключ/значения ввода. Каждый маппер выдает ноль, одну или несколько пар выходной ключ/значение для каждой пары входной ключ / значение.

The объединить фазы выполняется комбинаторами. Элемент комбайнер должен сочетать пары ключ / значение с одним и тем же ключом. Каждый объединитель может работать ноль, один раз или несколько раз.

The перемешать и сортировать фазы проводится рамках. Данные от всех картографов сгруппированы по ключу, разделены между редукторами и отсортированы по ключу. Каждый редуктор получает все значения, связанные с одним и тем же ключом. Программист может применить пользовательскую функцию сравнения для сортировки и раздел для разделения данных.

The раздел решает, какой редуктор получит определенную пару ключевых значений.

в редуктор получает отсортированных пар ключ/[список значений], отсортированных по ключу. Список значений содержит все значения с одним и тем же ключом, созданным сопоставителями. Каждый редуктор выдает ноль, один или несколько выходных пар ключ / значение для каждой входной пары ключ / значение.

взгляните на этот javacodegeeks статьи Мария Юрковичова и mssqltips статья Датта для лучшего понимания

ниже Изображение от safaribooksonline статьи

enter image description here

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

enter image description here

Если я снова заявляю реальную цель

  • Сплит: улучшает параллельную обработку путем распределения нагрузки обработки между различными узлами (Mappers), что позволит сохранить общую обработку время.

  • объединить: сжимает выходные данные каждого картографа. Это позволит сэкономить время, затрачиваемое на перемещение данных с одного узла на другой.

  • Сортировка (Shuffle & Sort): делает его легким для времени выполнения запланировать (спавн/старт) новые редукторы, где пока идущ через сортированный список деталя, когда настоящий ключ отличал предыдущее, он может породить новый редуктор.

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

Я всегда предполагал, что это необходимо, поскольку выход из mapper является входом для редуктора, поэтому он был отсортирован на основе пространства ключей, а затем разделен на ведра для каждого входа редуктора. Вы хотите, чтобы все одинаковые значения ключа оказались в одном и том же ведре, идущем к редуктору, поэтому они уменьшаются вместе. Нет смысла посылать K1,V2 и K1, V4 к разным редукторам, поскольку они должны быть вместе, чтобы быть уменьшенными.

попытался объяснить это так просто, как возможно

перетасовка-это процесс, при котором промежуточные данные от картографов передаются на 0,1 или более редукторов. Каждый редуктор получает 1 или более ключей и связанных с ними значений в зависимости от количества редукторов (для сбалансированной нагрузки). Далее значения, связанные с каждым ключом, сортируются локально.

есть только две вещи, которые MapReduce делает изначально: сортировка и (реализовано сортировкой) масштабируемая GroupBy.

большинство приложений и шаблонов проектирования над MapReduce построены на этих двух операциях, которые обеспечиваются перемешиванием и сортировкой.

этой - это хорошее чтение. Надеюсь, это поможет. Что касается сортировки, которую вы касаетесь, я думаю, что это для операции слияния на последнем шаге карты. Когда операция map завершена, и нужно записать результат на локальный диск, мульти-слияние будет работать на разбиениях, созданных из буфера. И для операции слияния, сортировка каждого раздела В advanced является полезным.

хорошо, В Mapreduce есть две важные фразы, называемые Mapper и редуктор оба слишком важны, но редуктор является обязательным. В некоторых программах редукторы являются необязательными. Теперь перейдем к вашему вопросу. Перетасовка и сортировка-две важные операции в Mapreduce. Сначала Hadoop framework принимает структурированные / неструктурированные данные и разделяет данные на ключ, значение.

теперь программа Mapper отделяется и упорядочивает данные в ключи и значения, которые будут обработанный. Генерировать ключ 2 и значение 2 значения. Эти значения должны обрабатываться и перестраиваться в правильном порядке, чтобы получить желаемое решение. Теперь эта перетасовка и сортировка выполняются в вашей локальной системе (Framework позаботится об этом) и обрабатываются в локальной системе после очистки process framework данные в локальной системе. ОК

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

К1, В1 -> К2, В2 (мы будем писать программу сопоставления), -> К2, в' (здесь перетасовать и мягкие данные) -> К3, В3 генерировать выходной. К4,В4.

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

Ваш вопрос: какова цель перетасовки и сортировки фазы в редукторе в Map Reduce Programming?

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