Не удалось обновить репозиторий NiFi FlowFile

Я использую Apache NiFi для приема и предварительной обработки некоторых файлов CSV, но при длительной работе всегда происходит сбой. Ошибка всегда одна и та же:

FlowFile Repository failed to update

При поиске в журналах я всегда вижу эту ошибку:

2018-07-11 22:42:49,913 ERROR [Timer-Driven Process Thread-10] o.a.n.p.attributes.UpdateAttribute UpdateAttribute[id=c7f45dc9-ee12-31b0-8dee-6f1746b3c544] Failed to process session due to org.apache.nifi.processor.exception.ProcessException: FlowFile Repository failed to update: org.apache.nifi.processor.exception.ProcessException: FlowFile Repository failed to update
org.apache.nifi.processor.exception.ProcessException: FlowFile Repository failed to update
        at org.apache.nifi.controller.repository.StandardProcessSession.commit(StandardProcessSession.java:405)
        at org.apache.nifi.controller.repository.StandardProcessSession.commit(StandardProcessSession.java:336)
        at org.apache.nifi.processor.AbstractProcessor.onTrigger(AbstractProcessor.java:28)
        at org.apache.nifi.controller.StandardProcessorNode.onTrigger(StandardProcessorNode.java:1165)
        at org.apache.nifi.controller.tasks.ConnectableTask.invoke(ConnectableTask.java:203)
        at org.apache.nifi.controller.scheduling.TimerDrivenSchedulingAgent$1.run(TimerDrivenSchedulingAgent.java:117)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
Caused by: java.io.IOException: **Cannot update journal file ./flowfile_repository/journals/8772495.journal because this journal has already been closed**
        at org.apache.nifi.wali.LengthDelimitedJournal.checkState(LengthDelimitedJournal.java:223)
        at org.apache.nifi.wali.LengthDelimitedJournal.update(LengthDelimitedJournal.java:178)
        at org.apache.nifi.wali.SequentialAccessWriteAheadLog.update(SequentialAccessWriteAheadLog.java:121)
        at org.apache.nifi.controller.repository.WriteAheadFlowFileRepository.updateRepository(WriteAheadFlowFileRepository.java:300)
        at org.apache.nifi.controller.repository.WriteAheadFlowFileRepository.updateRepository(WriteAheadFlowFileRepository.java:257)

Что заставляет меня думать, что основная причина заключается в том, что Нифи не может обновить файл журнала ./flowfile_repository/journals/8772495.journal, потому что этот журнал уже был закрыт **, как видно из файла журнала.

Как я могу решить эту проблему?

Спасибо!


person Jpf    schedule 12.07.2018    source источник
comment
Привет @ jesus-para-fernandez, какую версию NiFi вы используете?   -  person Óscar Andreu    schedule 12.07.2018
comment
Я использую NiFi 1.7.0. Я занимаюсь расследованиями и думаю, что это проблема объема памяти. Я увеличил его до 3.5G, и это действительно работает.   -  person Jpf    schedule 12.07.2018
comment
Странная проблема, никогда раньше не видел, у вас есть кастомный процессор? вы используете его в Linux или Windows?   -  person Óscar Andreu    schedule 12.07.2018
comment
Нет, специальный процессор не использовался. ОС - это сервер Ubuntu 16   -  person Jpf    schedule 12.07.2018


Ответы (3)


Если у NiFi возникают проблемы с записью в файл журнала, необходимо проверить несколько вещей.

  • Вы читаете большие поля из CSV (более 64 КБ) и пытаетесь назначить их атрибутам? Вы можете рассмотреть возможность обработки этого конкретного поля в вашем CSV как отдельного потокового файла и сопоставления его с атрибутами позже. См. это обсуждение списка рассылки для получения дополнительной информации.

  • Вы проверили конфигурацию NiFi по лучшему практики, перечисленные в руководстве по администрированию? Я также рекомендую изучить каждый из настроек репозитория Flowfile.. Это позволит вам задавать более конкретные вопросы.

  • Вероятно, стоит обновить настройки JVM, чтобы разрешить обработку больших файлов. Ознакомьтесь с этим сообщением на Hortonworks с подробным описанием передовых методов для высокопроизводительных систем.

Чтобы решить эту проблему, вам может потребоваться настроить пару вещей. Эффективно ли обрабатывает CSV-файл? Достаточно ли у NiFi памяти для работы с данными? Было бы более подходящим обрабатывать файлы CSV как записи? Если эта концепция вам незнакома, прочтите этот пост, который вводит обработку записей в NiFi. Я надеюсь, что некоторые из этих ресурсов помогут вам немного приблизиться к решению. Если у вас есть дополнительный вопрос, дайте мне знать.

person Nathan    schedule 16.07.2018

На днях я столкнулся с той же проблемой. Когда я проверил дисковое пространство на томе, где находится "flowfile_repository", я увидел это

/dev/sdc1       447G  447G   24K 100% /var/proj/data2

Его 100% заполнено.

person Vijay Kumar    schedule 02.05.2019

Я столкнулся с той же проблемой после двухдневного использования Nifi в моей системе Ubuntu.

Сначала я запустил команду du -shr ./* в папке Nifi, оказалось, что там много логов приложений. Размер каждого файла журнала составляет 101 МБ. Думаю, это значение удержания по умолчанию.

Поскольку мне сейчас не нужно вести журнал для этого, я обновил файл logback.xml в папке Nifi / conf, установив для журнала приложения ежедневный перенос.

person maoyang    schedule 09.04.2021