Необходима помощь для внедрения лучшей практики. Условия эксплуатации:Apache Spark on YARN: Большое количество файлов входных данных (объединить несколько входных файлов в искру)
- Файл данных регистрации поступает нерегулярно.
- Размер файла данных журнала составляет от 3,9 КБ до 8,5 МБ. В среднем около 1 МБ.
- Число записей файла данных составляет от 13 строк до 22000 строк. В среднем около 2700 строк.
- Файл данных должен быть обработан после обработки перед агрегацией.
- Алгоритм последующей обработки может быть изменен.
- Последующий файл управляется отдельно с исходным файлом данных, так как алгоритм пост-обработки может быть изменен.
- Выполняется ежедневная агрегация. Весь файл данных после обработки должен быть отфильтрован по записям и агрегированию (средний, максимальный мин ...).
- Поскольку агрегация мелкозернистая, количество записей после агрегации не так мало. Это может быть около половины количества исходных записей.
- В какой-то момент число файлов после обработки может составлять около 200 000.
- Файл данных должен быть удален отдельно.
В тесте я попытался обработать 160 000 обработанных после обработки файлов Spark, начинающихся с sc.textFile() с помощью glob-пути, с обработкой исключения OutOfMemory в процессе драйвера.
Какова наилучшая практика для обработки данных такого типа? Должен ли я использовать HBase вместо обычных файлов для сохранения данных после обработки?
Спасибо, что поделились этим. Я думаю, что аргумент размера особенно ценен, поскольку он не может быть указан на coalesce(). – zeodtr
Это решение лучше, чем слияние, потому что оно работает на этапе карты, но сливается после. –
С тех пор hasoop поддерживает CombineTextInputFormat (по крайней мере, от версии 2.2), объединение небольших входных файлов может быть выполнено с помощью sc.newAPIHadoopFile() без реализации пользовательского класса. – zeodtr