В чем разница между фазой перемешивания и фазой объединения?

я очень запутался в MapReduce Framework. Я сбиваюсь с толку, читая об этом из разных источников. Кстати, это моя идея MapReduce Job

1. Map()-->emit <key,value>  
2. Partitioner (OPTIONAL) --> divide
    intermediate output from mapper and assign them to different
    reducers
3. Shuffle phase used to make: <key,listofvalues>    
4. Combiner,    component used like a minireducer wich perform some
    operations on    datas and then pass those data to the reducer.
    Combiner is on local    not HDFS, saving space and time.    
5. Reducer, get the data from the    combiner, perform further
    operation(probably the same as the    combiner) then release the
    output.     
6.  We will have n outputs parts,    where n is the number
    of reducers

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


person rollotommasi    schedule 06.10.2016    source источник
comment
Представляет ли число в вашем сообщении последовательность, в которой происходит каждая операция?   -  person Amit    schedule 06.10.2016
comment
Да, на мой взгляд, да.   -  person rollotommasi    schedule 07.10.2016
comment
круто, в любом случае, я думаю, что ниже ответ объясняет суть.   -  person Amit    schedule 07.10.2016
comment
Взгляните на соответствующий вопрос SE: stackoverflow.com/questions/22141631/   -  person Ravindra babu    schedule 11.10.2016


Ответы (3)


Комбайнер НЕ похож на фазу перемешивания. То, что вы называете перетасовкой, неправильно, и в этом корень вашего замешательства.

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

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

Разделение - это действительно назначение ключей вывода карты конкретным задачам сокращения, но это не обязательно. Переопределение HashPartitioner по умолчанию собственной реализацией необязательно.

Я старался, чтобы этот ответ был минимальным, но вы можете найти дополнительную информацию в книге Hadoop: The Definitive Guide Тома Уайта, как предлагает Азим, и некоторых связанных вещах в этот пост.

person vefthym    schedule 12.10.2016

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

В классическом примере WordCount вывод фазы карты будет (слово, 1) для каждого слова, обрабатываемого задачей карты. Предположим, что ввод, который нужно обработать,

«Она жила в большом доме с большим гаражом на окраине большого города в Индии»

Без комбайнера map phase испускает (большой, 1) три раза, (a, 1) трижды и (in, 1) два раза. Но когда используется комбайнер, фаза карты будет выдавать (big, 3), (a, 3) и (in, 2). Обратите внимание, что отдельные вхождения каждого из этих слов агрегируются локально в фазе отображения перед тем, как оно испускает свой вывод для сокращения фазы. В тех случаях, когда используется Combiner, он будет оптимизирован, чтобы гарантировать минимизацию сетевого трафика от карты до сокращения за счет локальной агрегации.

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

person Vijay Bhoomireddy    schedule 07.10.2016
comment
Попробуйте взглянуть на это руководство: [ссылка] developer.yahoo. com / hadoop / tutorial / module4.html # functions [/ Но как объединитель может вычислить сумму, если фаза перемешивания еще не была выполнена? Я имею в виду, что для суммирования значений в списке значений вам нужно остаться после фазы перемешивания! IMHO, комбайнер может действовать до фазы тасования или сразу после нее, в зависимости от типа данных, которые он получает в качестве входных данных. Например, в wordcount объединитель выполнит суммирование каждого раздела, а затем он перейдет к настоящему редуктору на hdfs. Поймите, что я имею в виду? Спасибо - person rollotommasi; 07.10.2016

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

Конвейерная обработка этих фаз может выглядеть так: Карта -> Разделение -> Объединитель (необязательно) -> Перемешать и отсортировать -> Уменьшить.

Вне этих фаз Map, Partition и Combiner работают на одном узле. Hadoop динамически выбирает узлы для запуска этапа сокращения в зависимости от доступности и доступности ресурсов наилучшим образом. Перемешивание и сортировка, важная фаза среднего уровня, работает с узлами Map и Reduce.

Когда клиент отправляет задание, Map Phase начинает работу с входным файлом, который хранится на узлах в виде блоков. Картографы обрабатывают каждую строку файла одну за другой и помещают сгенерированный результат в некоторый буфер памяти размером 100 МБ (локальная память для каждого преобразователя). Когда этот буфер заполняется до определенного порога, по умолчанию 80%, этот буфер сортируется и затем сохраняется на диск (как файл). Каждый Mapper может сгенерировать несколько таких промежуточных отсортированных разделов или файлов. Когда Mapper завершает работу со всеми строками блока, все такие разбиения объединяются (для формирования единого файла), сортируются (на основе ключа), а затем фаза Combiner начинает работу с этим единственным файлом. Обратите внимание, что если нет фазы разделения, будет создан только один промежуточный файл, но в случае разделения файлов создается несколько файлов в зависимости от логики разработчиков. Изображение ниже из Oreilly Hadoop: полное руководство может помочь вам понять эту концепцию более подробно.

введите описание изображения здесь

Позже Hadoop копирует объединенный файл с каждого из узлов Mapper в узлы Reducer в зависимости от значения ключа. То есть все записи одного и того же ключа будут скопированы в один и тот же узел Reducer.

Я думаю, вы можете хорошо знать о работе SS и Reduce Phase, поэтому не будем вдаваться в подробности по этим темам.

Кроме того, для получения дополнительной информации я предлагаю вам прочитать руководство Oreilly Hadoop: The Definitive. Это потрясающая книга по Hadoop.

person Azim    schedule 11.10.2016
comment
раздел не является обязательным, переопределение разделителя по умолчанию не является обязательным. - person vefthym; 12.10.2016