Какой самый быстрый способ удалить содержимое потока файлов nifi? - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть рабочий процесс, в котором я получаю файлы json в ответ на остальные API.Я получаю примерно 100 тыс. Файлов за сеанс.Общий размер всех файлов составляет 15 ГБ.Я должен сохранить каждый файл в файловую систему, что я делаю.в конце процесса мне нужно подождать, пока все файлы появятся, прежде чем я отправлю сообщение об успешном завершении.

Как только я сохраняю файл в FS, я вызываю notify + wait.но мне больше не нужны данные 15 ГБ в файле потока.Поэтому, чтобы освободить место, я подумал об использовании replaceText или ModifyByte для очистки содержимого.так что оповещение + ожидание проходит гладко.Общее время ожидания этого процесса - 3 часа.

Но процесс занимает слишком много времени в обоих случаях (replaceText или ModifyByte).

Можете ли вы предложить самый быстрый способ очистить данные потокового файла. Мне тоже не нужны никакие атрибуты.Есть ли способ, которым я могу отказаться от старого файла потока и сгенерировать файл потока kb, на полпути?

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

Спасибо

1 Ответ

0 голосов
/ 15 ноября 2018

Репозиторий содержимого NiFi и репозиторий FlowFile основаны на механизме копирования при записи, поэтому, если вы не изменяете содержимое или метаданные, вы не обязательно «сохраняете» 15 ГБ для этих процессоров.

Сказав, что, если все, что вам нужно, это наличие таких потоковых файлов на диске (но не содержимого или метаданных), попробуйте ExecuteScript с помощью следующего скрипта Groovy:

def flowFiles = session.get(1000)
flowFiles.each {
   session.transfer(session.create(), REL_SUCCESS)
}
session.remove(flowFiles)

Этот скрипт будет работать до1000 потоковых файлов одновременно, и для каждого из них отправляйте пустой потоковый файл вниз по течению.Затем он удаляет все исходные файлы входящего потока.

Обратите внимание, что это (т. Е. Ваш случай использования) "сломает" цепочку провенанса / происхождения, поэтому, если что-то пойдет не так в вашем потоке, вы не сможетечтобы сказать, какие потоковые файлы поступили из каких родительских потоковых файлов и т. д. Это ограничение является одной из причин, почему вы не видите полноценный процессор, который выполняет такую ​​функцию.

...