Nifi无法写入FileSystemRepository Stream

时间:2017-02-13 09:27:28

标签: apache-nifi

我有一个流程,我正在使用getFile处理器。输入目录是网络安装点。当我测试小文件(小于1GB)的流量时,它运行良好。当我在较大的文件(超过1GB)上测试时,我收到以下错误:

  

GetFile [id = f1a533fd-1959-16d3-9579-64e64fab1ac6]无法检索   由于的文件   org.apache.nifi.processor.exception.FlowFileAccessException:失败   从/ path / to / directory导入数据   StandardFlowFileRecord [UUID = f8389032-c6f5-43b9-a0e3-7daab3fa115a,权利要求=,偏移= 0,名字= 490908299598990,大小= 0]   由于java.io.IOException:无法写入FileSystemRepository   Stream [StandardContentClaim   [resourceClaim = StandardResourceClaim [ID = 1486976827205-28,   container = default,section = 28],offset = 0,length = 45408256]]

您对此错误的来源有任何了解吗?

感谢您的回答

2 个答案:

答案 0 :(得分:1)

虽然丹尼斯提供的答案在分析根本原因方面是正确的,但没有解决方案,所以让我提供一个。

容器的答案/解决方案

由于您无法为 docker volume 指定大小,因此如果您的流文件内容缺少所需的空间,我们将无法将它们用于此任务。

相反,我建议使用 bind mounts。这样,您最多可以使用(理论上)您所有的机器磁盘。

# Create a folder where to locate the NiFi Flowfiles content in the host
mkdir -p /tmp/data/nifi/nifi-data-content_repository

然后,修改您的 docker-compose.yml 文件以修改要使用的存储类型。具体来说,您必须查找内容存储库卷:

- type: source
  source: nifi-data-content_repository
  target: /opt/nifi/nifi-current/content_repository

并将其替换为针对我们刚刚在上面创建的文件夹的绑定安装:

- type: bind
  source: /tmp/data/nifi/nifi-data-content_repository
  target: /opt/nifi/nifi-current/content_repository

准备好,现在您可以使用这个能够使用主机磁盘空间的安装重新部署您的 NiFi。

阅读有关 official docs 中绑定安装的更多信息。

答案 1 :(得分:0)

根据评论,安迪找到了这个特定案例的答案,并被问询者确认:

内容存储库与文件大小成比例太小。

未来的读者要注意的另一件事是Nifi节点的内存是否足够大以容纳单个消息。