Как отсортировать произвольно большой набор данных с помощью Hadoop? - PullRequest
0 голосов
/ 16 декабря 2011

Мой вопрос связан с этим постом Сортировка больших данных с помощью MapReduce / Hadoop . Моя идея сортировки произвольного набора:

  1. У нас есть большой файл с записями, скажем, 10 ^ 9 записей.
  2. Файл разделен на M картографов. Каждый маппер сортирует разделение по размеру, скажем, 10000 записей с использованием быстрой сортировки, и выводит эту отсортированную подпоследовательность. Выходной ключ находится в диапазоне от 1 до R, где R - количество задач редуктора (предположим, R = 4). Значение является отсортированной подпоследовательностью.
  3. Каждый Редуктор считывает K подпоследовательностей и объединяет их (итеративно отбирает наименьший элемент из подпоследовательностей, пока подпоследовательности не становятся пустыми). Вывод записывается в файл.

Затем выполняется следующая обработка:

Чтобы воспользоваться преимуществами локальности данных, можно запланировать новые задачи редуктора для объединения нескольких выходных файлов, созданных предыдущей задачей редуктора. Например, если K = 5, первая задача редуктора создаст файлы размером 50000, а новая задача редуктора будет работать с 5 файлами по 50000 отсортированных записей в каждом. Новые задания редуктора будут запланированы до тех пор, пока не останется только один файл, в этом случае с размером 250.000.000 (потому что R = 4). Наконец, на другом компьютере должно быть запланировано новое задание Reducer для объединения файлов в один файл 10 ^ 9

.

Мой вопрос : возможно ли в Hadoop планировать выполнение заданий Reducer таким образом, чтобы они объединяли файлы в некотором каталоге, пока не останется только 1 файл? Если да, то как?

Другой сценарий может заключаться в планировании заданий MapReduce после каждого шага слияния, например, файлы размером 50000 будут объединяться параллельно путем сокращения задач, выполняющихся на других машинах, затем файлов размером 250 000 на других машинах и т. Д. но это будет генерировать много сетевого трафика. В любом случае вопрос остается в силе и для этого случая - как связать несколько заданий MapReduce так, чтобы цепочка прекратилась после вывода только 1 результирующего файла?

1 Ответ

1 голос
/ 16 декабря 2011

Сортировка Hadoop выполняется с помощью разделителя . см., например, исходный код для теста terasort

...