NiFi FlowFile储存库更新失败

时间:2018-07-12 08:30:38

标签: apache-nifi journal data-ingestion

我正在使用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)

让我相信根本原因是Nifi无法更新日志文件./flowfile_repository/journals/8772495.journal,因为该日志已经关闭**,如在日志文件中所示。

我该如何解决这个问题?

谢谢!

3 个答案:

答案 0 :(得分:1)

如果NiFi在写入日志文件时遇到问题,则需要检查一些事项。

  • 您是否正在从CSV中读取较大的字段(大于64kb),并尝试将其分配给属性?您可能需要考虑将CSV中的特定字段作为单独的流文件处理,并在以后与属性进行匹配。有关更多信息,请参见this mailing list discussion

  • 您是否已根据管理指南中列出的best practices检查了NiFi的配置?我还建议您了解每个Flowfile repository settings。它可以让您提出更有针对性的问题。

  • 可能值得更新您的JVM设置以允许更大的文件处理。请查看this post on Hortonworks,其中详细介绍了高性能系统的最佳做法。

为了解决该问题,您可能需要调整几件事。流程是否以有效方式处理CSV? NiFi是否有足够的内存来处理数据?将CSV文件作为记录处理是否更合适?如果您不熟悉该概念,请查看this post,它介绍了NiFi中的记录处理。我希望其中一些资源可以帮助您更接近解决方案。如果您有后续问题,请告诉我。

答案 1 :(得分:0)

前几天,我遇到了同样的问题。 当我检查“ flowfile_repository”所在的卷上的磁盘空间时,我看到了

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

其100%充满。

答案 2 :(得分:0)

在我的 Ubuntu 系统上运行 Nifi 2 天后,我遇到了同样的问题。

首先,我在 Nifi 文件夹下运行命令 du -shr ./*,结果那里有很多应用程序日志。每个日志文件都是101M。我认为这是保留的默认值。

由于我现在不需要保留那么多日志,所以我更新了 Nifi /conf 文件夹中的 logback.xml 文件,将应用程序日志设置为每日更新。