Сортировка 1 ТБ файла на машине с 1 ГБ RAM

Этот вопрос кажется легким, но я не в состоянии понять реальную работу, стоящую за ним. Я знаю, что люди скажут: разбейте на куски по 512 мегов и отсортируйте их, используя Merge Sort с помощью Map reduce.

Так вот в чем собственно мой вопрос:

Предположим, я разбиваю файл на куски по 512 мегов, а затем отправляю их на разные хост-машины для сортировки. Предположим, что эти машины используют сортировку Merge Sort. Теперь, скажем, у меня есть 2000 машин, каждая из которых отсортировала 2000 512-меговых кусков. Теперь, когда я объединяю их обратно, как это работает? Не будет ли размер снова продолжать увеличиваться? Например, если объединить два 512-меговых куска, то получится 1024 мегабайта, что соответствует размеру моей оперативной памяти, так как это будет работать? Любая машина не может объединить чанк размером более 512 мегов с другим чанком, потому что тогда размер > 1 ГБ.

Как в конце объединения я смогу объединить два 0,5 ТБ чанка с другим 0,5 ТБ чанком? Вступает ли здесь в игру концепция виртуальной памяти?

Я здесь, чтобы прояснить свои основы, и я надеюсь, что я правильно задаю этот очень важный вопрос (правильно). Также, кто должен делать это слияние (после сортировки)? Моя машина или несколько из тех 2000 машин?

11
задан bruceparker 22 December 2011 в 03:03
поделиться