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

Учитывая, что сортировка происходит на стороне карты. Я предполагаю, что все пары (k, V) в файлах утечки упорядочены по ключам. В нашем случае составные ключи.

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

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

0
Raghavi Ravi 23 Ноя 2017 в 09:49

1 ответ

Лучший ответ

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

Ключи отсортированы как в маппере, так и в редьюсерах:

  1. сопоставители сортируют пары KV для каждого вывода редуктора, в результате чего каждый выходной файл сортируется в соответствии с SortComparator
  2. reducer берет много отсортированных файлов от мапперов и объединяет их вместе, обеспечивая ввод для вызовов reduce ()

По умолчанию значения приходят в reduce () в неопределенном порядке. Как правило, это будет зависеть от всего: порядка, в котором вы создаете пары ключ / значение на карте, порядка, в котором hadoop решает объединить файлы, используемый алгоритм сортировки и так далее.

0
gudok 23 Ноя 2017 в 07:51