Map Reduce, редуктор автоматически сортирует? - PullRequest
0 голосов
/ 08 ноября 2018

есть кое-что, что мне не совсем понятно в функциональном представлении среды программирования MapReduce.

Учитывая, что 1k случайных несортированных слов в форме (word, 1) выходит из (или более чем одного) преобразователя. Предположим, с помощью редуктора я хочу сохранить их все в одном огромном отсортированном файле. Как это работает? Я имею ввиду, сам редуктор сортирует все слова автоматически? Что должна делать функция редуктора? Что делать, если у меня есть только один редуктор с ограниченным ОЗУ и диском?

1 Ответ

0 голосов
/ 10 ноября 2018

enter image description here

когда редуктор получает данные, данные уже отсортированы на стороне карты.

процесс такой:
Сторона карты:
1. Каждый inputSplit будет обработан задачей карты, а результат вывода карты будет временно помещен в буфер с циклической памятью [SHUFFLE] (размер буфера по умолчанию равен 100 МБ, управляемый io.sort.mb имущество). Когда буфер собирается переполниться (по умолчанию 80% размера буфера), файл переполнения будет создан в локальной файловой системе.
2. Перед записью на диск поток сначала делит данные на одинаковое количество разделов в соответствии с количеством задач сокращения, то есть задача сокращения соответствует данным одного раздела. чтобы избежать некоторых задач сокращения, назначаемых большим объемам данных, даже без данных. Фактически данные в каждом разделе сортируются. Если в это время установлен Combiner, отсортированный результат подвергается операции Combiner.
3. Когда локальная задача выводит последнюю запись, может быть много файлов переполнения, и эти файлы необходимо объединить. Операции сортировки и объединения постоянно выполняются в процессе слияния для двух целей: 1. Минимизировать объем данных, записываемых на диск каждый раз; 2. Минимизируйте объем данных, передаваемых сетью на следующем этапе репликации. Наконец-то объединены в разбитый на разделы и отсортированный файл. Чтобы уменьшить объем данных, передаваемых по сети, вы можете сжать их здесь, просто установите для mapred.compress.map.out значение true.
4. Скопируйте данные из раздела в соответствующую задачу сокращения.
Уменьшить сторону:
1.Reduce будет получать данные из разных задач карты, и объем данных, отправляемых с каждой карты, упорядочивается. Если объем данных, принятых стороной сокращения, достаточно мал, он напрямую сохраняется в памяти. Если объем данных превышает определенную пропорцию размера буфера, данные объединяются и записываются на диск.
2. По мере увеличения количества файлов переполнения фоновый поток объединит их в более крупный, упорядоченный файл. Фактически, независимо от стороны карты или стороны сокращения, MapReduce многократно выполняет операции сортировки и слияния.
3. Процесс слияния создаст много промежуточных файлов (записанных на диск), но MapReduce сделает данные, записанные на диск, настолько малыми, насколько это возможно, и результат последнего слияния будет записан не на диск, а непосредственно введен Чтобы уменьшить функцию.

...