Чтение больших входных файлов (10 ГБ) через Java-программу - PullRequest
2 голосов
/ 21 июля 2011

Я работаю с 2 большими входными файлами порядка 5 ГБ каждый .. Это вывод карты Hadoop Reduce, но, поскольку я не могу выполнять вычисления зависимостей в Map Reduce, я переключаюсь на оптимизированный дляЦикл для окончательных вычислений (см. мой предыдущий вопрос о сокращении дизайна карты Рекурсивные вычисления с использованием Mapreduce

Я хотел бы получить предложение о чтении таких огромных файлов в Java и выполнении некоторых основных операций, наконец, ябудет записывать данные, которые будут порядка 5 ГБ ..

Я ценю вашу помощь

Ответы [ 3 ]

1 голос
/ 21 июля 2011

Звучит так, будто простой реализации не так много. Просто откройте InputStream / Reader для файла, а затем в цикле:

  1. Читайте в одной части ваших данных
  2. Обработка части данных
  3. Сохраните результат: в памяти, если у вас будет место для полного набора данных, в какой-то базе данных, если не

Если ваш набор результатов будет слишком большим, чтобы его можно было хранить в памяти, то простым способом исправить это будет использование базы данных H2 с локальным хранилищем файлов.

1 голос
/ 21 июля 2011

Если у файлов есть свойства, как вы описали, то есть 100 целочисленных значений на ключ и каждый по 10 ГБ, вы говорите об очень большом количестве ключей, гораздо больше, чем вы можете вписать в память.Если вы можете заказать файлы перед обработкой, например, используя утилиту сортировки ОС или задание MapReduce с одним редуктором, вы можете читать два файла одновременно, выполнять обработку и выводить результат, не сохраняя слишком много данных в памяти.

0 голосов
/ 24 июля 2011

Мой подход,

Сконфигурировал программу редукции карт для использования 16 редукторов, поэтому окончательный вывод состоял из 16 файлов (от-00000 до-00015) объемом 300+ МБ, а ключи были отсортированы водин и тот же порядок для обоих входных файлов.

Теперь на каждом этапе я читал 2 входных файла (около 600 МБ) и выполнял обработку. Поэтому на каждом этапе мне приходилось хранить в памяти до 600 МБ, чтосистема может очень хорошо управлять.

Программа была довольно быстрой и заняла около 20 минут для полной обработки.

Спасибо за все предложения! Я ценю вашу помощь

...