Мой вопрос связан с этим постом Сортировка больших данных с помощью MapReduce / Hadoop .
Моя идея сортировки произвольного набора:
- У нас есть большой файл с записями, скажем, 10 ^ 9 записей.
- Файл разделен на M картографов. Каждый маппер сортирует разделение по размеру, скажем, 10000 записей с использованием быстрой сортировки, и выводит эту отсортированную подпоследовательность. Выходной ключ находится в диапазоне от 1 до R, где R - количество задач редуктора (предположим, R = 4). Значение является отсортированной подпоследовательностью.
- Каждый Редуктор считывает K подпоследовательностей и объединяет их (итеративно отбирает наименьший элемент из подпоследовательностей, пока подпоследовательности не становятся пустыми). Вывод записывается в файл.
Затем выполняется следующая обработка:
Чтобы воспользоваться преимуществами локальности данных, можно запланировать новые задачи редуктора для объединения нескольких выходных файлов, созданных предыдущей задачей редуктора. Например, если K = 5, первая задача редуктора создаст файлы размером 50000, а новая задача редуктора будет работать с 5 файлами по 50000 отсортированных записей в каждом. Новые задания редуктора будут запланированы до тех пор, пока не останется только один файл, в этом случае с размером 250.000.000 (потому что R = 4). Наконец, на другом компьютере должно быть запланировано новое задание Reducer для объединения файлов в один файл 10 ^ 9
.
Мой вопрос : возможно ли в Hadoop планировать выполнение заданий Reducer таким образом, чтобы они объединяли файлы в некотором каталоге, пока не останется только 1 файл? Если да, то как?
Другой сценарий может заключаться в планировании заданий MapReduce после каждого шага слияния, например, файлы размером 50000 будут объединяться параллельно путем сокращения задач, выполняющихся на других машинах, затем файлов размером 250 000 на других машинах и т. Д. но это будет генерировать много сетевого трафика. В любом случае вопрос остается в силе и для этого случая - как связать несколько заданий MapReduce так, чтобы цепочка прекратилась после вывода только 1 результирующего файла?