Помещение комбинера для использования в mapreduce вторичной сортировке

Я реализовал вторичную сортировку для моего приложения.

File-1                          File-2                    File-3
------                          ------                    ------

name,pos,r,value           name,pos,r,value            name,pos,r,value

   aa,1,0,123                 aa,2,1,1                    aa,3,1,11
   bb,1,0,234                 aa,2,2,34                   aa,3,2,12
                              aa,2,3,55                   aa,3,3,13
                              bb,2,1,99                   bb,3,1,15
                              bb,2,2,54                   bb,3,2,19
                              bb,2,3,32                   bb,3,3,13

Для каждой записи в Файле-1 будут доступны три записи в Файле2 и Файле3 каждая.

составной ключ::name + (pos+r)

естественный ключ:: имя

Порядок сортировки основан на составном ключе. Восходящий порядок, основанный на (pos + r)

Ожидаемый результат

Содержимое файла File1 конкретного имени (aa), за которым следует все содержимое файла file2 (три строки aa упорядочены на основе pos + r), а затем следует содержимое файла три (три строки aa упорядочены на основе pos+)

аа,123,1,34,55,11,12,13

бб,234,99,54,32,15,19,13

Я реализовал это во вторичной сортировке, используя setGroupingComparatorClass, setSortComparatorClass и пользовательский разделитель.

Мои сомнения:

1) Как добавить комбайнер для этого сценария.

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

2) Если добавлен объединитель, как и когда произойдет сортировка, чтобы функция сокращения получала выходные данные от всех преобразователей в правильном порядке.

  • Будут ли отсортированы выходные данные карты дважды: один раз в объединителе, который выполняется после каждой карты, и снова на стороне редуктора для сортировки всех выходных данных объединителя?

1 ответ

Предлагаем вам пройти через http://bytepadding.com/big-data/map-reduce/understanding-map-reduce-the-missing-guide/

  1. Сортировка происходит по картографу.
  2. Слияние (сортировка и слияние) происходит по редуктору.
  3. Combiner это дополнительный слой, где вы пытаетесь уменьшить на Mapper.
  4. Редуктор всегда получает все заданные значения для данного ключа.
  5. Mapper отправляет значения данного ключа в отсортированном виде.

Пожалуйста, ознакомьтесь с групповым компаратором и сортировочным компаратором и используйте его соответствующим образом.

Другие вопросы по тегам