我在Centos 7上使用Apache NiFi 0.4.1和Java 7,并尝试根据一些传入数据创建流文件。我正在运行一个" OutOfMemoryError:Java堆空间"由于我正在生成大量数据而导致异常。
据我所知,这是因为NiFi在写入流文件时提供的输出流是ByteArrayOutputStream,因此数据存储在内存中。我可以理解为什么会发生这种情况,但我可以使用GetFile / PutFile来处理更大的文件(我尝试加载一个10Gb文件,记录其属性并将其写入不同的位置,这有效)。这里有什么我想念的吗?有没有办法写更大的流文件?或者NiFi 0.5.0会改变什么来帮助我吗?
注意:我不认为增加可用的Java堆空间量将解决我的问题
答案 0 :(得分:1)
正如评论中所强调的那样,单元测试框架使用内容存储库的变体,其中所有内容都存储在内存中,以便在测试时提高速度。实际上,如果内容很大,那么你就直接在堆上施加压力。在实际应用程序中,这些项目是通过流进出磁盘的内容存储库读取的。
如果出现扩展正在内存中读取内容而不是使用大型文件的流式传输的情况,那么这些问题也可能出现在核心框架中。