Просто угадай ...
Учитывая огромный набор данных, вы бы разбили данные на несколько кусков для параллельной обработки (возможно, по номеру записи, т.е. запись 1 - 1000 = раздел 1 и т. Д.).
Назначение / планирование каждого раздела для определенного узла в кластере.
Каждый узел кластера будет дополнительно разбивать (отображать) раздел на свой собственный мини-раздел, возможно, в алфавитном порядке. Итак, в разделе 1 найдите все, что начинается с A, и выведите его в мини-раздел A из x Создайте новый A (x), если в настоящее время уже есть A (x). Замените x порядковым номером (возможно, это задача планировщика). То есть Дайте мне следующий A (x) уникальный идентификатор.
Передать (запланировать) задания, выполненные преобразователем (предыдущий шаг), в узлы «сокращения» кластера. Затем кластер сокращения узла будет дополнительно улучшать сортировку каждой части A (x), которая будет происходить только после того, как все задачи маппера будут выполнены. будет еще один мини раздел в разработке). Выведите результат в конечном отсортированном разделе (то есть Sorted-A, Sorted-B и т. Д.)
После этого объедините отсортированный раздел в один набор данных снова. На данный момент это просто простая конкатенация из n файлов (где n может быть 26, если вы только делаете A - Z) и т. Д.
Между ними могут быть промежуточные шаги ... Я не уверен :). То есть дальнейшее отображение и уменьшение после начального шага уменьшения.