应该结合哪些处理器来处理NiFi中的大型JSON文件?

时间:2018-05-08 14:02:39

标签: apache-nifi

我想设置一个NiFi工作流程,它可以提取大型JSON文档(500 MB到3 GB之间),这些文档已经从FTP服务器中解压缩,将JSON对象拆分为单独的流文件,最后转换每个JSON对象到SQL并将其插入MySQL数据库。

我在Oracle Java 8上运行NiFi 1.6.0,而Java的堆空间设置为1024 MB。

我目前的流程是:

GetFTP - > CompressContent - > SplitJson - > EvaluateJsonPath - > AttributesToJson - > ConvertJSONToSQL - > PutSQL

此流程适用于较小的JSON文档。一旦大于400 MB的文件进入SplitJson处理器,它就会抛出Java OutOfMemory错误。我可以对现有流程进行哪些更改以使其能够处理大型JSON文档?

1 个答案:

答案 0 :(得分:6)

通常,您希望避免拆分为每个文档的流文件。如果可以将多个文档放在一个流文件中,您将获得更好的性能。您将需要了解NiFi的记录处理功能,特别是您需要查看PutDatabaseRecord。

以下是记录处理方法的一个很好的介绍: https://www.slideshare.net/BryanBende/apache-nifi-record-processing

如果你必须执行拆分到每个流文件的单个记录,那么你应该至少执行两阶段拆分,其中第一个拆分处理器拆分为每个流文件10k-20k,然后是第二个拆分处理器每个流文件拆分为1个。