2014-09-18 3 views
4

Я попытался реализовать вторичный сорт. поэтому у меня есть вопрос, связанный с этим:Сортировка в каркасе hadoop

Sorting happens 3 times in Hadoop framework 

1) Sorting in Buffer (Sorting occur based on key of a map function) 
2) Sorting during merging of spill files of mapper output(?????????????) 
3) Sorting at Reducer side when reducer gets map output from various mapper based on partition logic again merging happens .(Sorting occur based on Sort Comparator) 

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

+0

В двух словах, сортировка разливы происходит, так что каждый преобразователь будет выводить один объединенный список записей (буфера может быть полным, прежде, чем заканчивает задание на карте). Сортировка со стороны карты происходит, чтобы «облегчить» сортировку рабочей нагрузки редуктора. Все эти фазы сортировки используют один и тот же сортировщик. – vefthym

+0

сортировка по ключевым словам будет использоваться только в первый раз в буфере? – user3484461

ответ

2

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

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

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

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

Чтобы проверить это, я написал ReverseIntWritable, который будет заказывать в обратном порядке для IntWritable, и я написал вывод таким же образом из mapper и редуктора.

Если я не использовал редуктор, вход {(1, xyz), (2, ijk)} выдается как {(1, xyz), (2, ijk)}. Если я использовал редуктор, выход для того же входа выходил как {(2, ijk), (1, xyz)}.

Надеется, что это помогает ..

+0

Спасибо за вашу реакцию, но мое замешательство было во второй фазе сортировки, я очень хорошо согласен с первой и третьей фазами, вы также объяснили, что первый и третий, немного осветить вторую фазу? – user3484461

+0

После фазы карты разливы объединяются в один отсортированный и разбитый на разделы файл. Свойство конфигурации io.sort.factor управляет максимальным количеством разливов, которое необходимо слить сразу. разделение указывает, к какому разделу он принадлежит. Вы можете выполнить поиск по секционированному файлу, чтобы просто визуализировать его. – Srini

+0

И эти разделы в выходном файле будут затем доступны для редуктора по http. Кстати, это процесс на каждом картографе. Этот процесс происходит у каждого картографа. Последнее, но не менее важное, при объединении файлов разливов данные будут отсортированы и разбиты на разделы ключом, и если функция объединителя есть, объединитель запускается в объединенных файлах. – Srini

Смежные вопросы