3

我在 Centos 7 上使用 Apache NiFi 0.4.1 和 Java 7,并尝试根据一些传入数据创建流文件。由于我生成大量数据,我遇到了“OutOfMemoryError:Java 堆空间”异常。

据我所知,这是因为 NiFi 在写入流文件时提供的输出流是 ByteArrayOutputStream,因此数据存储在内存中。我可以理解为什么会发生这种情况,但我可以使用 GetFile/PutFile 来处理一个更大的文件(我尝试加载一个 10Gb 文件,记录其属性并将其写入另一个位置,这很有效)。我在这里缺少什么吗?有没有办法编写更大的流文件?或者 NiFi 0.5.0 有什么改变可以帮助我吗?

注意:我认为增加可用的 java 堆空间量不会解决我的问题

4

1 回答 1

2

正如评论中强调的那样,单元测试框架使用内容存储库的变体,其中所有内容都存储在内存中,以提高测试速度。事实上,如果内容很大,你就是在直接对堆施加压力。在实际应用中,这些项目通过流向/从磁盘读取到/从内容存储库中读取。

如果出现扩展正在读取内存中的内容而不是使用流处理大文件的情况,这些问题也可能出现在核心框架中。

于 2016-02-23T15:18:02.543 回答