Какие процессоры следует объединить для обработки больших файлов JSON в NiFi? - PullRequest
0 голосов
/ 08 мая 2018

Я хотел бы настроить рабочий процесс NiFi, который извлекает большие документы JSON (от 500 МБ до 3 ГБ), которые были сжаты с FTP-сервера, разбивает объекты JSON на отдельные файлы потока и, наконец, преобразует каждый объект JSON. в SQL и вставить его в базу данных MySQL.

Я использую NiFi 1.6.0 в Oracle Java 8, и в Java установлено 1024 МБ пространства кучи.

Мой текущий поток:

GetFTP -> CompressContent -> SplitJson -> EvaluateJsonPath -> AttributesToJson -> ConvertJSONToSQL -> PutSQL

Этот поток отлично работает для документов JSON меньшего размера. Он выдает Java OutOfMemory ошибок, как только файл размером более 400 МБ попадает в процессор SplitJson. Какие изменения можно внести в существующий поток, чтобы он мог обрабатывать большие документы JSON?

1 Ответ

0 голосов
/ 08 мая 2018

Как правило, вы хотите избежать разделения на файл потока для каждого документа. Вы получите гораздо лучшую производительность, если сможете хранить множество документов в одном файле потока. Вы захотите взглянуть на возможности обработки записей NiFi, особенно на PutDatabaseRecord.

Вот хорошее введение в подход к обработке записей: https://www.slideshare.net/BryanBende/apache-nifi-record-processing

Если вам абсолютно необходимо выполнить разбиение на отдельные записи для файла потока, то вам следует по крайней мере выполнить двухфазное разделение, при котором первый процессор разделения разделяется до, возможно, 10k-20k на файл потока, затем второй процессор разделения разбивает до 1 на файл потока.

...